1. Giới thiệu Spring Boot
1.1. Spring Boot là gì?
Spring là một Java framework siêu to và khổng lồ, làm được đủ mọi thứ. Nó được chia thành nhiều module, mỗi module làm một chức năng, ví dụ Spring Core, Web, Data access, AOP,... Spring được xây dựng dựa trên 2 khái niệm nền tảng là Dependency injection và AOP (Aspect Oriented Programming).
Một rắc rối khi dùng Spring là việc cấu hình (config) dự án quá phức tạp. Bạn phải làm đủ thứ việc chỉ để tạo một web HelloWorld:
- Tạo Maven hoặc Gradle project
- Thêm các thư viện cần thiết
- Tạo XML để cấu hình project, cấu hình các bean
- Code và build thành file WAR
- Cấu hình Tomcat server để chạy được file WAR vừa build
Đấy, Spring khá mạnh mẽ nhưng việc cấu hình nghe thôi cũng mệt rồi. Do đó Spring boot ra đời, với các ưu điểm:
- Auto config: tự động cấu hình thay cho bạn, chỉ cần bắt đầu code và chạy là được
- Xây dựng các bean dựa trên annotation thay vì XML
- Server Tomcat được nhúng ngay trong file JAR build ra, chỉ cần chạy ở bất kì đâu java chạy được
So sánh với Spring, thì Spring Boot bạn chỉ cần:
- Dùng Spring Initializr, nhập các info của project, chọn thư viện rồi down code về
- Mở source code ra và bắt đầu code
- Chạy ngay trong IDE, hoặc build thành file JAR để chạy được ngay, không cần cấu hình server
1.2. Tại sao nên học Spring Boot?
Trước đây mình đã có tìm hiểu về Node.js và chuyển sang Spring Boot. Cảm nhận của mình là khi code Spring Boot chúng ta sẽ tập trung nhiều hơn vào business logic, nghĩa là mục tiêu của code làm được gì.
Với Node.js, do nó quá linh hoạt nên bạn sẽ phải tập trung nhiều vào code hơn, thay vì mục đích của code. Kiểu như bạn phải tìm "best practice", "cách tốt nhất" để code điều gì đó.
Nhưng với Spring boot thì khác, có nhiều thư viện có sẵn và cấu trúc code cũng thành chuẩn mực rồi, nên bạn không cần quá quan tâm phải viết code thế nào cho tốt nữa, thay vào đó sẽ tập trung vào logic hơn.
Mình thấy nhiều bạn hỏi câu này: "Nên học Spring hay Spring Boot trước?". Theo mình thì nên học Spring Boot trước.
Mình nghĩ tư tưởng của nhiều bạn vẫn mang nặng kiểu "cái cũ tốt hơn cái mới", "tìm hiểu từ gốc",... nhưng thực sự khi bắt đầu nên tìm hiểu cái dễ dàng hơn. Vừa đỡ nản, vừa làm được sản phẩm thực tế, trong khi với Spring bạn vẫn còn đang phải cấu hình quá nhiều và chưa làm được gì ra hồn cả.
2. Cần tìm hiểu những gì
2.1. Java Core
Trước khi học Spring Boot thì các bạn cần biết Java. Một số kiến thức cần thiết của Java như sau:
- Java cơ bản: biến, hàm, vòng lặp,...
- Hướng đối tượng (OOP)
- Java 8: các tính năng mới trong java 8 (tối thiểu phải biết)
- Collections API: biết cách dùng các collection thông dụng (quan trọng)
Ngoài ra các bạn có thể tìm hiểu thêm (không biết cũng không sao vì Spring Boot khá ít đụng tới):
- Stream API
- Asynchronous
- Multi threading
- File IO
2.2. Package manager
Khi code dự án Spring Boot thì cần có package manager để quản lý các thư viện cài thêm. Bạn nào code Javascript sẽ biết về NPM và Yarn, thì Java cũng có hai package manager tương tự là Maven và Gradle.
-
Tìm hiểu cách dùng Maven cơ bản
-
Tìm hiểu cách dùng Gradle cơ bản
Phần này khi mới bắt đầu không nên tìm hiểu quá sâu, chỉ cần biết cách cài đặt thư viện, xóa thư viện, chỉnh sửa thông tin project, các build-in tasks là được. Sau này khi đụng tới nhiều thì bạn tự khắc quen thôi.
2.3. Spring Boot
Cách học Spring Boot đúng đắn là học thực hành, làm project. Bởi vì nhiều thứ trong Spring Boot rất dễ, hoặc thành chuẩn mực rồi, chủ yếu là bạn đã từng đụng tới chưa thôi.
-
Học Spring Boot bắt đầu từ đâu: Bài giới thiệu lộ trình học hôm nay.
-
Tạo dự án Spring Boot đầu tiên: Dùng Spring Initializr để generate code, chọn các dependency, chạy, debug, build JAR và chạy file JAR đó.
-
Luồng đi trong Spring Boot: Tìm hiểu một service Spring Boot gồm những thành phần nào, và luồng đi của dữ liệu ra sao.
-
Dependency injection áp dụng vào Spring Boot như thế nào (phần 1)
-
Dependency injection áp dụng vào Spring Boot như thế nào (phần 2)
-
Bean và ApplicationContext là gì trong Spring Boot: Tìm hiểu cơ bản về Bean và ApplicationContext.
-
Vòng đời, các loại bean và cơ chế component scan: Tìm hiểu sâu hơn về cách các bean được định nghĩa và xử lý.
-
Cấu trúc một dự án Spring Boot thế nào cho chuẩn: Tìm hiểu các thành phần cơ bản như Controller, Services,... và cách tổ chức chúng trong source code.
-
Entity, DTO và Model: Ba đối tượng chứa dữ liệu chính và cách convert, mapping qua lại giữa chúng.
-
Xử lý request trong Controller (phần 1): Xử lý các loại HTTP request, nhận và trả về dữ liệu như thế nào?
-
Xử lý request trong Controller (phần 2): Trả về lỗi và xử lý chuyên dụng với các loại data đặc biệt.
-
Validation dữ liệu request - luôn luôn cần thiết
-
Tổ chức code service trong Spring Boot: bài ngắn gọn nói sơ qua về vai trò của service layer.
-
Xử lý exception hiệu quả trong Spring Boot: Cách tạo Aspect để bắt exception dù nó ném ra ở bất cứ đâu.
-
Cấu hình Spring Boot trong file application.properties: đó là gì và kĩ thuật chia cấu hình hiệu quả.
-
HTML template và static content: Thư mục template và static là gì, có chức năng như thế nào?
-
Scheduled job trong Spring Boot: Tạo và thực hiện tác vụ theo lịch trình đặt sẵn.
-
Lập trình hướng khía cạnh AOP không khó như bạn nghĩ: Tìm hiểu về AOP, các khái niệm liên quan và thực hiện một demo logging cơ bản.
2.4. JPA/MongoDB
Mình chỉ mới làm quen với Spring Boot được 6 tháng, và project mình làm chỉ về MongoDB thôi. Còn về SQL thì mình sẽ làm sau nhé
-
Cách cấu hình database trong Spring Boot: Tạo DB, thêm các thông số kết nối và kết nối.
-
Cấu trúc lớp và interface của JPA: JPA/MongoDB gồm những interface, class nào, phân cấp ra sau và chức năng của chúng.
-
CRUD cơ bản: Tìm hiểu các thao tác cơ bản CRUD.
-
Query creation: Tự động sinh câu query dựa trên tên method, hoặc bạn có thể custom nó bằng @Query.
-
Thực hiện các câu query phức tạp bằng MongoTemplate: Sử dụng MongoTemplate và các đối tượng như Query, Update,... để thực hiện các hành động phức tạp hơn với query.
-
Sắp xếp và phân trang data query được: Sort và paging dữ liệu query, đặc biệt là custom paging bằng skip và limit.
-
Thực hiện aggregation: Tổng hợp dữ liệu trong MongoDB
2.5. Template engine
Template engine xử lý phần View trong ứng dụng MVC, trong Spring Boot thì chúng ta sử dụng template engine để pass dữ liệu vào View và trả về một trang HTML.
-
Trả về trang HTML cơ bản trong Spring Boot
-
Sử dụng Thymeleaf trong Spring Boot
-
Sử dụng JSP trong Spring Boot
2.6. Các tool khác
Ngoài ra, trong dự án Spring Boot sẽ cần một số tool khác được embed vào code. Và bạn cần biết cấu hình và sử dụng chúng để nâng cao năng suất code.
-
Cấu hình và sử dụng Swagger trong Spring Boot: Swagger là một tool dùng để xem, chạy, test các API tương tự Postman. Đặc biệt là nó được kèm theo trong chính project của bạn, nó sẽ tự động phân tích metadata của code và sinh API. Ngoài ra Swagger còn có thể generate document từ code của bạn.
-
Thiết lập Logger cho project Spring Boot
-
Lombok - viết code Java ngắn hơn
-
Cấu hình Spring Actuator: Công cụ giám sát, theo dõi tình trạng web service Spring Boot. Actuator sẽ thêm 1 số API để bạn dùng, ví dụ /info hoặc /health để check tình trạng hoạt động của project.
-
Quarzt - giải pháp thay thế cho Spring Schedule
-
Cấu hình Firebase trong Spring Boot: Sử dụng các tính năng của Firebase như Authentication, Firestore, Storage,... trong dự án Spring Boot.
-
Cấu hình Spring Boot devtools: Để có được các tính năng như HotReload.
2.7. Nâng cao
-
Unit testing: Sử dụng JUnit để test ứng dụng Spring Boot.
-
Xuất file Excel trong Spring Boot: Sử dụng Apache POI để tạo và xuất file Excel.
-
Cách thêm SSL cho Spring Boot: Làm cho API của bạn hỗ trợ HTTPS
-
Cách gửi mail trong Spring Boot
-
Cách cấu hình trang 404 và white page
2.8. What's next?
Sau khi đã nắm được đủ các kiến thức trên, các bạn có thể tìm hiểu thêm một số thứ khác liên quan Spring Boot.
-
Tìm hiểu Spring Security cơ bản
-
Xác thực người dùng trong Spring Security bằng session
-
Xác thực người dùng trong Spring Security bằng JWT
-
Spring batch là gì?
-
Spring reactive web: Web framework bất đồng bộ tương tự Node.js nhưng là Java.
Spring Boot mặc định sử dụng ngôn ngữ Java, các bạn có thể tìm hiểu thêm về Kotlin cũng khá hay.
3. Good resources
Các trang web học Java và Spring Boot khá tốt:
- Logicbig: Web học Java siêu dễ hiểu
- Loda.me: Lúc mình mới tìm hiểu Spring Boot cũng học trên đây, khá ok.
- Javatpoint: Lúc đầu có coi sơ mà viết dài dòng quá nên hơi mệt, dành cho những bạn kiên nhẫn và muốn đào sâu.
À quên nữa, nếu các bạn có thắc mắc hoặc có gì đó cần bổ sung vào series thì hãy comment bên dưới nhé. Nó sẽ giúp mình hoàn thiện series cũng như kiến thức nữa.