Giới thiệu Spring Boot

Chúc mừng năm mới! Đầu xuân SmartJob nói về dự án Spring Boot thuộc hệ sinh thái Spring Framework. Xin chia sẻ cùng bạn bè đồng nghiệp là lập trình viên.

Trong mảng phát triển ứng dụng doanh nghiệp, Spring Framework ngày càng được ưa chuộng do có kiến trúc tốt, độ ổn định và tin cậy cao. Trước đây, việc tạo source-base, một trong những bước đi đầu tiên khi xây dựng ứng dụng trên nền Spring framework là công việc cần nhiều thời gian, tích hợp các mô-đun, thêm thư viện, giải quyết sự tham chiếu chồng chéo (như mạng nhện) khi class nọ gọi class kia (dependencies management), v.v..

Nhiều công  ty đang sử dụng Spring framework để phát triển ứng dụng nội bộ cũng như cho khách hàng của họ, xem thêm trên SmartJob: https://smartjob.vn/?s=Spring+framework&job_location2=2146 .

Spring Boot giúp tích hợp và điều hợp (như vai trò của nhạc trưởng) hàng trăm mô-đun (Tại thời điểm viết bài 02/08/2015 con số chính xác là 186 mô-đun) khác nhau một cách mượt mà, nhiều mô-đun thuộc hệ sinh thái Spring Framework (Spring Security, Spring Transaction management, Spring ORM, v.v..)

THÔNG TIN THÊM VỀ SPRING BOOT
Trang chủ: http://projects.spring.io/spring-boot/
Mã nguồn: https://github.com/spring-projects/spring-boot
Group chat của các nhà phát triển: https://gitter.im/spring-projects/spring-boot

Trong mảng ứng dụng web doanh nghiệp sử dụng Java, Spring boot là một trong những dự án hoạt động sôi nổi nhất trên GitHub ở thời điểm hiện tại. Group chat có sự tham gia của gần 700 developer, commit vẫn được đẩy lên hàng ngày, phiên bản mới được release đều đặn. Phiên bản ổn định mới nhất: 1.3.2 , Phiên bản snapshot mới nhất: 1.4.0.SNAPSHOT .

Sự sôi động của dự án Spring Boot ở thời điểm hiện tại

Sự sôi động của dự án Spring Boot ở thời điểm hiện tại

Giờ đây, với Spring Boot, xây dựng ứng dụng Spring framework (ở mức đơn giản, tạo source-base) chỉ trong vòng 1 bản nhạc (5 phút).

CHUẨN BỊ MÔI TRƯỜNG VÀ CÔNG CỤ PHÁT TRIỂN
– JDK 8u74 [1]
– Spring Tool Suite 3.7.2.RELEASE (Nhớ chọn gói cài đặt phù hợp với hệ điều hành, kiến trúc máy tính 32bit hoặc 64 bit của bạn) [2]
– Plug-in Gradle build tool cài đặt bên trong Spring Tool Suite. (Chúng ta sẽ sử dụng Gradle là build tool thế hệ mới tiên tiến hơn cả Maven) [3]
– Có kết nối internet (để lấy file pom.xml được sinh ra bởi web services Spring Initializr, tải về thư viện, phân giải dependencies)

Link download:

[1] http://www.oracle.com/technetwork/java/javase/downloads/index.html
[2] https://spring.io/tools/sts/all
[3] http://marketplace.eclipse.org/content/gradle-ide-pack (có vài plug-in Gradle khác nhau cho Eclipse, bạn nên dùng plug-in này)

Chọn menu File New Spring Starter Project

s1

Giả sử chúng ta đã tạo xong ứng dụng, ứng dụng được đóng gói (packaging) thành file jar. File jar này có thể được đẩy lên Maven repository thì cần 3 yếu tố GAV để định danh (G: Group, A: Artifact, V: Version). Chúng ta đặt tên như trong ảnh chụp màn hình.

s2

Đây là các tùy chọn mô-đun. Chúng ta thấy vai trò “nhạc trưởng” của Spring Boot thể hiện rõ ở bước này. Mỗi mô-đun như một “nhạc công”, còn cả ứng dụng là “dàn nhạc”.

s3

s4

Về bản chất, Spring Tool Suite giao tiếp với web services Spring Initializr qua website http://start.spring.io để tạo project cho bạn rồi tải project về qua một file nén định dạng zip.

s5

Trong lần chạy đầu tiên, tải về thư viện (dependencies) từ kho (repository) sẽ tốn thời gian. Từ lần thứ hai, nếu không phát sinh dependency mới, IDE chỉ kiểm tra xác nhận sự có mặt, việc khởi tạo sẽ hoàn thành một cách nhanh chóng.

s6

IDE đã tạo ra file build.gradle có nội dung như sau:

Trước đây, khi chưa có Spring Boot, việc tạo tập tin build.gradle này là việc làm thủ công (Nếu project sử dụng nhiều mô-đun thì khá phức tạp).

Trong package com.smartJob.demo, tạo class HelloBean:

Thay đổi phương thức main() của class com.smartJob.demo.HelloDeveloperApplication để có:

Design pattern có tên Inversion of Control (“Đảo luồng điều khiển”) , triết lý căn bản của Spring Framework thể hiện ngay ở ví dụ đơn giản này. Chúng ta không khởi tạo đối tượng theo cách

mà sử dụng cơ chế khai báo ApplicationContext, rồi khởi tạo đối tượng dựa trên phương thức ApplicationContext.getBean(); Chúng ta cũng sử dụng cơ chế Reflection (“Tự phản chiếu”) để gọi class HelloBean bằng cách dùng HelloBean.classs .s7a

KẾT QUẢ

s7

MẸO: Nếu bạn không thích khởi tạo dự án từ IDE, bạn có thể khởi tạo dự án từ website: https://start.spring.io/ (nhớ bấm vào link Switch to the full version để bung ra đầy đủ các tùy chọn), sau đó tạo ra file build.gradle (nếu dùng Gradle) hoặc pom.xml (nếu dùng Maven), tải về, rồi import và Spring Tool Suite IDE.

SPRING BOOT CÓ THẬT SỰ TỐT?

Bạn đọc có thể ngờ vực về tính ưu việt của Spring Boot. Tại sao tôi phải dùng Spring Boot, trong khi có thể khai báo các dependency một cách thông thường trong pom.xml hoặc build.gradle?

SỰ THAM CHIẾU/ PHỤ THUỘC (dependency)

Bạn là lập trình viên Java server-side/back-end, bạn biết để xây dựng một ứng dụng web, sẽ gọi đến các thư viện như Hibernate, Apache Commons Lang, JUnit, JSTL, Metro, v.v.. Và điều tương tự cũng diễn ra trước đó, khi các lập trình viên xây dựng nên các thư viện mà bạn đang dùng. Lập trình viên xây dựng nên Hibernate cũng phải gọi đến, kế thừa thư viện A, B, C bên ngoài… Lập trình viên xây dựng nên Log4J cũng phải gọi đến, kế thừa thư viện A, Z, X bên ngoài… Cứ như vậy, việc tham chiếu sẽ trở lên rối rắm, phức tạp.

Các dependency là phụ thuộc chéo lẫn nhau, thêm nữa, nó còn tồn tại ở nhiều nhiều phiên bản khác nhau. Artifact A version 1 tham chiếu đến artifact B, B tham chiếu đến artifact G, G tham chiếu đến A version 2, v.v.. Spring Boot giải quyết vấn đề quản lý dependency (cùng với cả số phiên bản), và test cẩn thật trước khi release (phát hành). Quản lý dependency tự động là tính năng mang lại giá trị cốt lõi của Spring Boot, là TỐT.

Mẹo: Không nên/đừng bao giờ gán số phiên bản cho dependency khi đã sử dụng Spring Boot, Spring Boot giải quyết cho bạn rồi, đã test cẩn thận rồi (chắc chắn tốt hơn việc bạn tự gán số phiên bản cho dependency).

Ghi chú: Dùng từ “dependency” sẽ chuẩn hơn dùng từ “thư viện”, tuy nhiên sẽ có cảm giác khó hiểu hơn với một số lập trình viên người Việt. Chẳng hạn có thể nói: dependency hibernate-core hoặc thư viện hibernate-core.

Mã nguồn project: HelloDeveloper
Clone/fork từ repository Github: https://github.com/SmartJobVN/IntroSpringBoot

Tìm hiểu thêm:

Spring Boot Reference Guide: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/pdf/spring-boot-reference.pdf
Spring Boot Javadoc: http://docs.spring.io/autorepo/docs/spring-boot/current/api/

Đỗ Như Vý – developer tại SmartJob


build tool,
build.gradle,
Gradle,
java,
Maven,
Spring Boot,
Spring framework,
Spring Inilializr,
Spring ORM,
Spring security,
Spring Tool Suite,