Spring Boot Là Gì: 5 Trụ Cột Nền Tảng Và Vòng Đời Startup
Tìm hiểu 5 trụ cột của Spring Boot, giải mã 14 bước trong SpringApplication.run() và nguyên lý opinionated nhưng không hề lock-in của framework.
TL;DR: Spring Boot không phải là một framework độc lập hoàn toàn mới mà là lớp đóng gói tối ưu trên nền tảng Spring Framework, loại bỏ hàng chục tệp cấu hình XML rườm rà. Sức mạnh của Boot đến từ 5 trụ cột: Starter Dependencies, Auto-Configuration, Embedded Server, Production-ready Features và Build Plugin. Phương thức SpringApplication.run() thực thi 14 bước, trong đó bước 12 chính là pha refresh() quen thuộc của Spring core container. Triết lý "opinionated" cung cấp cấu hình mặc định sẵn có nhưng cho phép lập trình viên ghi đè mọi thứ qua @ConditionalOnMissingBean.
Hiểu rõ bản chất của Spring Boot giúp bạn gạt bỏ cảm giác "phép thuật đen", tự tin điều tra lỗi khởi động và làm chủ toàn bộ tiến trình ứng dụng.
1. Vấn đề cấu hình phức tạp của Spring 4 khiến Spring Boot ra đời?
Trước năm 2014, việc khởi tạo một dự án Spring 4 đòi hỏi nhiều thao tác cấu hình thủ công tẻ nhạt:
- Tự dò tìm ma trận phiên bản tương thích giữa hàng chục thư viện Spring, Hibernate, Jackson trong
pom.xml. - Khai báo tệp
web.xmlđể cấu hìnhDispatcherServletvàContextLoaderListener. - Viết hàng trăm dòng cấu hình bean trong
applicationContext.xml. - Cài đặt máy chủ Tomcat bên ngoài, đóng gói file
.warvà sao chép thủ công vào thư mụcwebapps.
Sự khác biệt về phiên bản giữa máy dev và server sản xuất khiến các dự án trở thành "những bông tuyết độc bản" (snowflake projects), rất khó bảo trì và sao chép môi trường.
2. Spring Boot 1.0 thay đổi cách tiếp cận thiết kế như thế nào?
Spring Boot ra đời vào tháng 4/2014 với mục tiêu đơn giản hóa tối đa: cung cấp các giá trị mặc định hợp lý nhất cho 80% trường hợp phổ biến:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Chỉ với một file Java duy nhất và một starter dependency trong pom.xml, máy chủ nhúng Tomcat tự khởi động trên cổng 8080 mà không cần bất kỳ dòng XML nào.
3. Năm trụ cột cốt lõi tạo nên sức mạnh của Spring Boot là gì?
Spring Boot giải quyết toàn bộ các điểm nghẽn của Spring 4 thông qua 5 trụ cột kỹ thuật:

- Starter Dependencies: Gom nhóm các thư viện theo chức năng và quản lý phiên bản tập trung qua BOM (Bill of Materials), loại bỏ xung đột phiên bản.
- Auto-Configuration: Tự động đăng ký các bean tiêu chuẩn vào container dựa trên các điều kiện kiểm tra classpath và thuộc tính cấu hình.
- Embedded Web Server: Đóng gói Tomcat, Jetty hoặc Undertow trực tiếp vào ứng dụng, cho phép chạy độc lập bằng lệnh
java -jar. - Production-ready Features (Actuator): Cung cấp sẵn các endpoint giám sát sức khỏe (
/actuator/health), đo lường metrics và quản lý cấu hình từ bên ngoài. - Build Plugin: Đóng gói ứng dụng thành một tệp thực thi duy nhất (Fat JAR) chứa đầy đủ mã nguồn và toàn bộ các thư viện phụ thuộc lồng nhau.
4. Phương thức SpringApplication.run() thực thi 14 bước ra sao?
Tiến trình khởi động của SpringApplication.run() được phân chia thành 14 bước rõ ràng:

- Bước 1-7: Chuẩn bị môi trường, lắng nghe sự kiện khởi động và xây dựng
Environment. - Bước 8-11: Khởi tạo
ApplicationContext, in biểu tượng Banner và áp dụng cácApplicationContextInitializer. - Bước 12: Kích hoạt phương thức
refresh()của Spring Core. Đây là bước trọng tâm: quét toàn bộ component, nạpBeanDefinition, thẩm định@Conditionalvà khởi tạo toàn bộ các Singleton bean cùng máy chủ nhúng Tomcat. - Bước 13-14: Thực thi các tác vụ
CommandLineRunner,ApplicationRunnervà phát sự kiệnApplicationReadyEvent.
Khi ứng dụng khởi động chậm, 80% thời gian tiêu tốn thường nằm ở bước 12 do việc kết nối cơ sở dữ liệu hoặc nạp dữ liệu khởi tạo.
5. Vì sao triết lý Opinionated không đồng nghĩa với Vendor Lock-in?
Nhiều người e ngại tính "áp đặt" (opinionated) của Spring Boot. Tuy nhiên, sự áp đặt này hoàn toàn khác với việc bị trói buộc (vendor lock-in):
| Tiêu chí | Spring Boot Opinionated | Vendor Lock-in |
|---|---|---|
| Khả năng ghi đè | Có cơ chế chính quy qua @ConditionalOnMissingBean | Khó ghi đè, thường phải sửa framework |
| Loại bỏ tính năng | Sử dụng thuộc tính exclude trong annotation | Phải viết lại toàn bộ mã nguồn |
| Mã nguồn bên dưới | Sử dụng mã Java thuần của Spring Core mở | Sử dụng các API đóng kín độc quyền |
Cơ chế "Back-off" đảm bảo rằng Spring Boot chỉ cung cấp cấu hình mặc định khi bạn chưa có lựa chọn riêng.
6. Làm thế nào để ghi đè hoặc loại bỏ hoàn toàn một Auto-configuration?
Nếu cấu hình mặc định không phù hợp với yêu cầu nghiệp vụ, bạn có hai cách xử lý:
// Cach 1: Tu khai bao Bean cung kieu - Boot tu dong lui lai
@Configuration
public class CustomDatabaseConfig {
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:postgresql://localhost:5432/prod_db");
return dataSource;
}
}
// Cach 2: Vo hieu hoa hoan toan class Auto-configuration
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
Tóm tắt
- Spring Boot là lớp tự động hóa thông minh được xây dựng trên Spring Framework nhằm xóa bỏ boilerplate cấu hình.
- 5 trụ cột nền tảng gồm Starter Dependencies, Auto-Configuration, Embedded Server, Production Features và Build Plugin.
- Tiến trình
SpringApplication.run()gồm 14 bước, với trọng tâm là bước 12 thực thi lệnhrefresh()của container. - Annotation
@SpringBootApplicationkết hợp@SpringBootConfiguration,@EnableAutoConfigurationvà@ComponentScan. - Tính "Opinionated" đi kèm cơ chế rút lui linh hoạt thông qua
@ConditionalOnMissingBeanvà cấm loại bỏ cấu hình quaexclude.
Tự kiểm tra
- Q1Spring Boot khác biệt căn bản như thế nào so với Spring Framework truyền thống?
- Q2Trong 14 bước khởi động của SpringApplication.run(), bước nào đóng vai trò trọng tâm thực thi việc tạo toàn bộ các Singleton bean và máy chủ nhúng?
- Q3Năm trụ cột cốt lõi của Spring Boot bao gồm những thành phần nào?
- Q4Annotation @SpringBootApplication là sự kết hợp của 3 annotation cốt lõi nào?
- Q5Tại sao triết lý Opinionated của Spring Boot không gây ra tình trạng Vendor Lock-in cho ứng dụng?
Bài tiếp theo: Starter & BOM: Quản Lý Dependency Đồng Bộ
Bài này có giúp bạn hiểu bản chất không?
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Tổng Quan Module 05: Spring Boot & Auto-Configuration
Bài tiếpStarter & BOM: Quản Lý Dependency Đồng Bộ Trong Maven
Lộ trình Junior Java Backend Developer
Chặng 14/21 · Spring Boot & autoconfiguration — bài 2/16 của chặng
Ôn phỏng vấn
Bài này trả lời được các câu phỏng vấn sau — tự trả lời thử trước khi mở đáp án.
Thảo luận & góp ý
Hỏi đáp về bài này