Spring Core & Boot
27/41
Bài 27 / 41~12 phútSpring Boot & Auto-configurationLộ trình · chặng 14/21Miễn phí… lượt xem

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ình DispatcherServlet và 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 .war và sao chép thủ công vào thư mục webapps.

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:

Java
@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:

Đối chiếu hai cột: cột trái là việc tay phải làm ở mọi project Spring 4 gồm tự chọn version cho 15+ module, viết applicationContext.xml, viết web.xml và cài Tomcat rời, viết log4j.xml cùng health check, đóng WAR phụ thuộc version Tomcat của máy đích; cột phải là trụ cột Boot xoá đúng việc đó theo từng hàng gồm Starter cộng BOM, Auto-Configuration, server nhúng, Actuator cộng config đưa ra ngoài jar, build plugin sinh jar chạy bằng java -jar

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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:

Trục thời gian của SpringApplication.run gom 14 bước thành năm mốc: bước 1 đến 7 Boot nhận diện kiểu app và dựng Environment, bước 8 đến 11 tạo ApplicationContext và chạy Initializer, bước 12 là refresh của Spring core tạo mọi singleton, bước 13 CommandLineRunner, bước 14 ApplicationReadyEvent; ba dòng log console dán vào đúng mốc sinh ra chú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ác ApplicationContextInitializer.
  • 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ạp BeanDefinition, thẩm định @Conditional và 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, ApplicationRunner và phát sự kiện ApplicationReadyEvent.

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 OpinionatedVendor Lock-in
Khả năng ghi đèCó cơ chế chính quy qua @ConditionalOnMissingBeanKhó ghi đè, thường phải sửa framework
Loại bỏ tính năngSử dụng thuộc tính exclude trong annotationPhải viết lại toàn bộ mã nguồn
Mã nguồn bên dướiSử 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ý:

Java
// 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ệnh refresh() của container.
  • Annotation @SpringBootApplication kết hợp @SpringBootConfiguration, @EnableAutoConfiguration và @ComponentScan.
  • Tính "Opinionated" đi kèm cơ chế rút lui linh hoạt thông qua @ConditionalOnMissingBean và cấm loại bỏ cấu hình qua exclude.

Tự kiểm tra

Tự kiểm tra
0/5 câu đã trả lời
  1. Q1
    Spring Boot khác biệt căn bản như thế nào so với Spring Framework truyền thống?
  2. Q2
    Trong 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?
  3. Q3
    Năm trụ cột cốt lõi của Spring Boot bao gồm những thành phần nào?
  4. Q4
    Annotation @SpringBootApplication là sự kết hợp của 3 annotation cốt lõi nào?
  5. Q5
    Tạ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.

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

Bài tiếp theo

Starter & BOM: Quản Lý Dependency Đồng Bộ Trong Maven