Trước khi Spring Boot ra đời, việc cấu hình một ứng dụng Spring thường đòi hỏi nhiều file XML hoặc các class Java cấu hình, sây khó khăn cho việc bảo trì và phát triển.. Sprine Boot đượ
Trang 1TRUONG DAI HOC GIAO THONG VAN TAI KHOA CONG NGHE THONG TIN
PHAN TICH THIET KE YEU CAU
So sánh hiệu suất và tính năng của Spring Boot và Quarkus trong phát triển web
Giảng viên hướng dẫn : GV Nguyễn Trọng Phúc
Trang 22.1 LCch sử hình thành của Spring Boo( LH ng ng n1 1111111511111 H kg ky 7
2.2 LCch sử hình thành của Quarkus - Q21 1n 2n ng ng ng KH ke 211151 cet 7
2.3 Các công nghệ trong cBng thời kỳ 11 1212291101 1011112 0111111111 1111k kh Ha 8
Chong 3: TKng quan cong nghé ccc cce sete etteenceeeceteeneetsecs sees eeseetieessecseeseeteeteeseeesens 11
3.1 Các thành phTn của Spring boot và Quarkus - 01011212 21H11 Hà re 11
BV.2, Quarkus occ ccc cceccsc cece seesssececseeecsssssnsssesessssscsssssnssssesessessnisessnisseseseeeeereniea ll
3.2 Cơ chế hoạt động của Spring boot và Quarkus ch HH HH ng ghen 12
3.2.1 Spring bootf LH ng HH1 1 n1 n1 HH HH th HH TH H111 kg 12
® Spring Boot Starter (Cầu hình các Start€T) s cccnn nnnntnn nen ng ng re 12
® —_ Auto-Configuration (Câu hình tự động) cà ST HH HH HH Ha 12
e@ Embedded Server (May chi nhting) 0 cc ccc ccccccceesceteesececsseesseecseeessensenseeseeesseseensens 12
e Externalized Configuration (Cau hinh ngoai) 00.00cccccccccsecescsscesssesesevsesvsseetsvectevevseensesees 12
e Sprine Boot Actuator (Theo đối và Quản Ìÿ) 111212 1 1101111111110 1 111 HH Hà 13
® Annotation va Dependency ÏnJ€CHOn LQ 2 1 111011121 1015111 011 0111111111111 rủ 13
e - Tương tác với các hệ sinh thái khác của SŠpTINE c0 2111 1121221111111 1 1xx Hy 13
3.3 So sánh ưu và nhược điểm của Spring boot và Quarkus -à- HH nen He 14
4.1 Những tính năng 2 công cụ cBng sở hữu
4.1.1, Câu hình và Quản lý - ác TH HT HH 2n H ng ng ng n2 ng
4.1.2 Xây dựng Microserviees và RESTifUl API, c1 v1 11112011 011011 110111 1111k He 15
4.1.3 Tích hợp với Cơ sở dữ liệu L Q.11 101111111111 011012 112111 11111 1211 111g KH xà 15
4.1.4 Hỗ trợ phát triển phản ứng và kiêm thử n1 T1 S 110211111 ng tư 15
4.1.5 Logeing và Quản lý phiên bản 0 02012211121 10111111111 11101511511 011 01111 H1 11k rà 16
4.1.6 Tính năng AOP (Aspeet-Oriented Progøram1n8) cc tt t3 32 211118118111 my rrớy 16
4.1.7 Hễ trợ Docker và Kubernetes 5 2n 212212211211 1121 1211212111112 are 16
4.1.8 Chế độ phát triển nhanh s5 St t 2211211211211 1122212121 012212121121 16
4.2 Những tính năng khác biỆt 0 200 n1 1112111111 110110111111 1111111111 H HH vn ch 16
4.2.1 Spring boot LH HH 111011 1H HH HH HH HH HH tàn Hành kg 16
Trang 34.3 So sánh tính năng của Spring boot và Quarkus 0 22122122 112 Hy Hye, 17 Chương ẽ: Phân tích thC trường - - ng HH t2 H2 2H He re 19 PhTn ế: Tiêu chí so sánh hiệu năng giữa spring boot và quarkus - 0 nen nhe 23
„68c 7 8n 25
Chuong 1: Introduction
Trang 41.1 TKng quan
Trong bối cảnh phát triển ứng dụng web hiện đại, việc lựa chọn công cụ và framework phù hợp là yếu tổ then chốt ảnh hưởng đến hiệu suất, khả năng mở rộng và trải nghiệm phát triển Sprine Boot đã lâu trở thành lựa chọn hàng đầu cho các nhà phát triển Java nhờ vào sự phong phú trong tính năng và cộng đồng hỗ trợ mạnh mẽ Tuy nhiên, với sự xuất hiện của Quarkus, một framework mới nỗi được thiết kế cho môi trường đám mây và microservices, việc so sánh giữa hai công cụ nảy trở nên cần thiết hơn bao giờ hết
Đề tài này tập trung vào việc so sánh hiệu nang va tinh nang cua Spring Boot va Quarkus trong phat triển web Mục tiêu là cung cấp cái nhìn sâu sắc về ưu và nhược điểm của từng công cụ, giúp các nhà phát triển có thể lựa chọn công cụ phủ hợp nhất cho nhu cầu của mình
Phần giới thiệu này sẽ bao gồm:
® Lý do tat sao Spring Boot va Quarkus duce so sánh
® Các tiêu chí chính được sử dụng để đánh giá hiệu năng và khả năng
quản lý dự án của hai công cụ
e Tam quan trọng của việc lựa chọn công cụ phù hợp trong bối cảnh phat triển các dự án web hiện đại
Với sự phát triển nhanh chóng của các công cụ và công nghệ mới, việc cập nhật
và đánh giá các công cụ xây dựng web không chỉ giúp tối ưu hóa quy trình phát triển
mà còn tạo tiền đề cho những cải tiến trong tương lai
nghiệp vụ hơn là mã soạn sẵn
- Quarkus la m6t framework ma nguồn mở được phát triển bởi Red Hat, được thiết kế đặc biệt cho các ứng dụng cloud-native và serverless Nó có cách tiếp cận "siêu âm, cận nguyên tử" để phát triển Java, tập trung vào thời gian khởi động nhanh, tiêu thụ bộ nhớ thấp và sử dụng tài nguyên hiệu quả Quarkus đạt
Trang 5được những lợi ích hiệu suất nảy bằng cách tận dụng biên dịch trước thời đại
(AOT), GraalVM và tạo hình ảnh gốc Ngoải ra, Quarkus cung cấp hỗ trợ riêng
cho các tiêu chuẩn Java phô biến như Jakarta EE và MicroProfile
1.3 License của Spring boot và Quarkus:
- Spring boot
Apache License 2.0 v Commercial use
quark quarkus is licensed under the Permissions
as Apache License 2.0 vy Commercial use
Trang 6Chương 2: LCch sử hình thành
2.1 LCch sw hinh thanh cua Spring Boot
Spring Boot được phát triển bởi Pivotal Software, với phiên bản đầu tiên
(Spring Boot 1.0) được phát hành vào tháng 4 năm 2014 Muc tiéu ban dau cua Spring Boot la giải quyết những hạn chế và phức tạp trong việc cầu hình Spring Framework truyền thông Spring Framework, mặc dù rất mạnh mẽ và linh hoạt, nhưng yêu cầu nhiều cầu hình thủ công và có thé tro nên cồng kềnh khi xây dựng các ứng dụng phức
tạp
Trước khi Spring Boot ra đời, việc cấu hình một ứng dụng Spring thường đòi
hỏi nhiều file XML hoặc các class Java cấu hình, sây khó khăn cho việc bảo trì và phát triển Sprine Boot được giới thiệu như một cách tiếp cận đơn giản và hiệu quả
hơn, với các cấu hình tự động và các công cụ hỗ trợ như Spring Initializr, giúp nhà
phát triển bắt đầu dự án mới nhanh chóng chỉ với một vài cú nhấp chuột
Từ khi ra mắt, Spring Boot đã nhanh chóng trở thành một trong những framework phô biến nhất trong cộng đồng Java, được sử dụng rộng rãi trong nhiều loại ứng dụng khác nhau, từ các ứng dụng web đơn giản đến các hệ thống microservices phức tạp Sự phát triển và cải tiến liên tục của Spring Boot đã giúp nó
trở thành một phần không thê thiếu trong hệ sinh thái Spring, giúp các nhà phát triển
xây dựng các ứng dụng hiện đại một cách dễ đàng và nhanh chóng hơn
2.2 LCch sử hình thành của Quarkus
Quarkus được công bố lần đầu vào tháng 12 năm 2019 Quarkus được phát triển bởi Red Hat, một công ty công nghệ lớn chuyên cung cấp giải pháp nguồn mở Nhóm phát triển Quarkus bao gồm nhiều kỹ sư và chuyên gia hàng đầu trong lĩnh vực Java va cloud-native.Quarkus duoc thiét ké dé đáp ứng nhu cầu về hiệu suất và khả
năng mở rộng trong phát triển ứng dụng Java, nhắm đến môi trường microservices và
cloud-native
Khac voi Spring Boot, Quarkus chú trọng vào việc tối ưu hóa cho các ứng dụng chạy trong môi trường container và cloud, với tính năng hot reload và khả năng khởi động nhanh Quarlus tận dụng công nghệ như GraalVMI để biên dịch mã Java thành
mã máy, giúp cải thiện hiệu suất và giảm thời gian khới động
Quarkus nhắm đến nhiều loại người dùng và đối tượng khác nhau trong lĩnh
vực phát triển phần mềm, bao gồm:
- Lập trình viên Java: Quarkus cung cấp một trải nghiệm phát triển mượt mà với tính năng hot reload, giúp lập trình viên phát triển nhanh chóng
Trang 7Nha phat trién Cloud-Native: Quarkus được tối ưu hóa cho môi trường cloud-
native, giup triên khai đễ dàng và hiệu quả hơn
Nhà kiến trúc sư hệ thống: Quarkus cho phép xây dựng các ứng dụng microservices linh hoạt và dễ mở rộng, phủ hợp với kiến trúc hiện đại
Doanh nghiệp và Tổ chức: Quarkus giúp giảm chỉ phí vận hành và tối ưu hóa hiệu suất ứng dụng
Cộng đồng nguồn mở: Quarkus là một đự án mã nguồn mở với cộng đồng đang phát triển, tạo cơ hội cho sự hợp tác và đổi mới
Trang 8Chương 3: TKng quan công nghệ
3.1 Các thành phTn của Spring boot và Quarkus
3.1.1 Spring boot
Spring Boot la mét framework manh mé giup phat trién ing dung Java một
cách nhanh chóng và dễ dàng Một số thành phần chính của Spring Boot:
- _ Spring Boot Starter:Là các phụ thuộc đã được câu hình sẵn dé giúp bạn đễ dàng thêm các tính năng vào ứng dụng
Vi du: spring-boot-starter-web cho ing dung web, spring-boot-starter-data-jpa
cho truy cập cơ sở đữ liệu
- _ Auto Confipuration: Tự động cầu hình ứng dụng dựa trên các thư viện có sẵn
trong classpath Điều này giúp giảm thiểu mã cấu hình mà bạn cần viết
- Spring Boot CLI (Command Line Interface):Cung cap mét cach nhanh chong
dé chay va phat trién ung dung Spring Boot bang cach str dung dong lệnh
- Spring Boot Actuator:Cung cap cac endpoint dé theo déi va quan lý ứng dụng,
giup ban kiém tra tinh trạng, hiệu suất, và các thông tin khác
3.1.2 Quarkus
Quarkus là một ffamework Java hiện đại được thiết kế đề tối ưu hóa cho môi
trường cloud-native, đặc biệt là cho các ứng dụng microservices Một số thành
phần chính của Quarkus:
- _ Quarkus Extensions:Quarkus cung cấp nhiều tiện ích mở rộng (extensions) để
tích hợp với các công nghệ khac nhau nhu Hibernate, RESTEasy, Kafka, va
nhiều hơn nữa Mỗi extension giúp tối ưu hóa hiệu suất và giảm kích thước ứng dụng
- GraalVM Integration:Quarkus hé tro biên dịch thành ma may (native image)
với GraalVM, giúp giảm thời gian khởi động và tiêu thụ bộ nhớ, rất phù hợp
cho các ứng dụng microservices
- Live Reload:Tinh nang live reload cho phép lập trình viên thấy ngay những
thay đổi trong mã nguồn mà không cần phải khởi động lại ứng dụng, giúp tăng
Trang 9Spring Boot két hop nhiéu packages (trong Maven & Gradle) gitip ban co thé include những hỗ tro phu hop cho project
G level cao nhat co 6 starters packages:
DATA STORE SPRING CORE
Spring Boot Starter thé hién qua cac dependencies dang spring-boot-starter-*
e Dependency springboot-starter-web mic dinh cung cap cac thu vién dé phat trién ing dung Spring MVC nhu spring-webmve, jackson-json, validation-api and tomcat Ngoai ra spring-boot-starter-web con cau hình các bean chung như DispatcherServlet, ResourceHandlers, MessageSource
e Dependency spring-boot-starter-data-jpa sé lấy ra các dependency của
spring-data-jpa và cũng thêm các thư viện Hibernate bởi vì hầu hết các
img dung déu str dung Hibernate lam cai dat cua JPA
e Dependency spring-boot-starter-Thymeleaf thém thu vién Thymeleaf va
cau hinh bean ThymeleafViewResolver
Chúng ta không cần định nghĩa các bean DataSource, EntityManagerFactory, TransactionManager chung duoc tao một cách tự động
Trang 10Nếu có bắt kỳ database drivers nào như H2 hoặc HSQL trong classpath, Spring
Boot sẽ tự động tao Datasource va dang ky bean EntityManagerFactory, TransactionManager m6t cách tự động với các mặc định hợp lý
Nhưng với từng hệ quản trị cơ sở dữ liệu khác nhau (ví dụ MySQL, PostgreSQL ) chúng ta phải cung cap connection médt cach chi tiét (url, username/password ) trong file application.properites
H6 tro nhing Servlet Container
e Sau khi run method main của ứng dụng từ file class được đánh dấu (@SpringApplication, chúng ta có thê truy cập ứng dụng ở dường dẫn http:/Aocalhost:8080/
Đề có thế chạy ứng dụng web như thế, Sprine boot đã nhúng sẵn Servlet Container vào ứng dụng
e Servlet Container được nhúng như nào?
Từ khi thêm sprmg-boot-starter-web thì spring-boot-starter-tomcat đã được thêm tự
dong va khi run method main() thi no sé start tomcat duoc nhung bên trong nên chúng
ta không cần deploy ứng dụng lên bất kì server nao
e Auto-Configuration (Cau hinh ty déng)
EnableAutoConfiguration annotation trong Spring cho phép nó tự động đoán
và cầu hình các bean mà ta có thể ứng dụng trong ApplicationContext Do đó, nó tự động tạo và đăng ký các bean dựa trên cả các tệp jar được bao gồm trong classpath và các bean do chúng ta tự định nghĩa
®_ Vị dụ, khi chúng ta sử dụng sprinp-boot-starter-web trong classpath, Spring boot sẽ tự động cấu hình Tomeat và Spring MVC
Ké tir Spring Boot 1.2.0 release, @SpringBootApplication annotation được giới
thiệu là sự kết hợp của (@Confipuration, @@EnableAutoConfipuration và
(@ComponentScan Do vậy không cần phải sử dụng @)EnableAutoConfipuration cách riêng lẽ
Trang 11@EnableAutoConfiguration annotation trong Spring cho phép no tu dong doan
và cau hinh cac bean ma ban có thể ứng dụng co thé can
Ví dụ nếu ta nhúng một tomcat-embedded.Jar trong classpath thì sẽ cần
TomcatEmbeddedServletContainerFactory bean đề cầu hinh tomcat server Spring sẽ dựa vào đó mà tự động cầu hình thay vi phải tự cầu hình thủ công với XML,
Package của lớp khai bao chu thich @EnableAutoConfiguration dugc coi la package
mặc định Do đó, chung ta nên luôn áp dụng chú thích @EnableAutoC onfiguration trong gói gốc để mọi gói con và lớp đều có thê được kiểm tra:
@Configuratlion
@EnableAutoConfiguration public class EmployeeApplication { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(EmployeeApplication.class, args);
@EnableAutoConfiguration voi parammter
Dưới đây là các tham sô chúng ta có thể truyền vào trong annotation nay:
m exclude— Loại bỏ một danh sách các class mà chúng ta không muốn cấu
public static void main(String[] args) { ApplicationContext context = SpringApplication.run(EmployeeApplication.cl
yi
Trang 12
ta có thê sử dụng excludeName để xác định một danh sách đầy đủ các tên class mà chúng ta muốn loại trừ khỏi cấu hình tự động:
@Configuration
ì(excludeName
° ° „autoconfig jdbc JdbcTemplateAutoConfiguratio public class EmployeeApplication {
ApplicationContext context = SpringApplication.run(EmployeeApplication.class
,
@ Embedded Server (May chu nhing)
Cơ chế: Spring Boot tích hợp các máy chủ nhúng nhu Tomcat, Jetty, va
Undertow
Hoạt động: Khi chạy ing dung, Spring Boot sẽ tự động khởi tạo may chu nhúng và ứng dụng sẽ được triển khai trên đó Điều nảy giúp ứng dụng chạy độc lập, giống như một ứng dụng Java bình thường, mà không cần triển khai trên một máy chủ bên ngoài
e Exteralized Configuration (Cau hinh ngoai)
Cơ chế: Spring Boot hé tro doc cau hình từ nhiều nguén, bao gém file
application.properties hoặc application.yml, biến môi trường, và dòng lệnh Hoạt động: Khi ứng dụng khởi động, Spring Boot sẽ đọc và tải các cầu hình này, sau đó áp dụng, cho các thành phan tương ứng trong ứng dụng Điều này cho phép thay đối cầu hình mà không cần thay đổi mã nguồn
e@ Spring Boot Actuator (Theo déi va Quan lý)
Co ché: Spring Boot Actuator cung cap cac endpoint dé kiém tra và giám sát ứng dụng
Hoạt động: Actuator mo cac endpoint nhu /actuator/health, /actuator/info dé theo dõi trạng thái của ứng dụng trong thời p1an thực Các endpoint này cung cấp các thông tin về sức khỏe hệ thống, các bean đã được cấu hình, thông tin về
bộ nhớ, và các thông số khác
e@ Annotation va Dependency Injection
- Dinh Nghia: Dependency InJection (DI) là phương pháp quản lý sự phụ thuộc
giữa các module trong lập trình, thuộc hình thức Inversion of Control (IoC) DI
Trang 13"tiêm" các đối tượng cần thiết vào một đối tượng khác thay vì để đối tượng tự tạo ra chúng
- - Nguyên Tắc Hoạt Động:
+ Khi một module (ví dụ: Car) cần một module khác (ví dụ: Engine):
© IoC container tìm và tạo đối tượng Engine
© Inject doi trong Engine vao Car
+ Tất cả module phụ thuộc được gọi là đependencies, và loC container đảm bảo mỗi dependency chi được tạo một lần (singleton)
- Cac Loai Dependency Injection:
+ Constructor-based Injection: Inject dependencies bat budéc qua
constructor
+ Setter-based Injection: Inject dependencies tuy chon qua phuong thirc
setter
- Ap Dung Trong Spring Boot:
+ Spring str dung DI voi IoC container (Application Context) dé quan ly cac Bean
+ Su dung annotation nhu @Component, @Service, @Repository dé danh dấu class cần tao thanh Bean
+ Khi một Bean cần phụ thuộc vào Bean khác, Spring sẽ tim trong container va inject tu động
- Cac annotation nhhu @Component, @Service, @Repository, va @Controller giúp Spring Boot tự động phát hiện và đăng ký các thanh phan trong context
Dependency Injection cho phép Spring Boot quan lý vòng đời của các bean và
tự động tiêm các phụ thuộc cho các đối tượng cần thiết
® Tương tác với các hệ sinh thái khác cua Spring
Spring Boot dễ dàng tích hợp với các hệ sinh thái khác như Spring Security,
Spring Data, Spring Batch, v.v
Cau tric chương trình spring boot:
- _ Cấu trúc chung của ứng dụng : Dù sử dụng Maven hay Gradle, cầu trúc dy án thường giống nhau và tuân theo template (Archetype):