Spring boot là gì? nó khác gì so với Spring?

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về Spring Boot một trong những framework đình đám nhất tại thời điểm hiện tại của Java dùng để phát triển các ứng dụng Java. 

Thế nhưng, cho dù bạn đã từng làm việc với Spring framework hay chưa thì chúng ta cũng nên biết về nó một chút. Vì mình thấy rất nhiều người hay nhầm lẫn giữa Spring và Spring Boot. Và nếu các bạn đi phỏng vấn thì câu hỏi này được xem là then chốt để xem bạn có hiểu mình rằng mình đang làm Spring Boot là làm cái gì hay chỉ là một thằng chỉ biết code và code mà thôi.

Spring là gì?

Nói một cách đơn giản, Spring Framework cung cấp một cơ sở hạ tầng toàn diện hỗ trợ các lập trình viên phát triển ứng dụng Java.

Nó đóng gói một số tính năng đặc biệt như Dependency Injection và các module như:

  • Spring JDBC
  • Spring MVC
  • Spring Security
  • Spring AOP
  • Spring ORM
  • Spring Test

Những module này có thể giúp các lập trình viên giảm thiểu đáng kể thời gian phát triển ứng dụng.

Cho ví dụ rằng trước đây muốn phát triển một ứng dụng Java Web, chúng ta cần viết rất nhiều mã nguồn chỉ để thêm một bản ghi vào database. Nhưng với việc sử dụng JDBCTemplate trong Spring JDBC module chúng ta chỉ cần một vài dòng code bằng cách cài đặt một số cấu hình nhất định.

Spring Boot là gì?

Một điểm hạn chế khi người mới bắt đầu với Spring là các bước cấu hình rất phức tạp, các bạn có thể mất hàng tá thời gian để ứng dụng có thể chạy được. Trước đây còn là sinh viên, học đến môn Java Web thầy bắt buộc sinh viên phải dùng Spring để viết, thế là mình mất hẳn 3 ngày chỉ để cấu hình cho cái web của mình chạy được “Hello world”. 

Với những hạn chế của Spring, Spring Boot ra đời, về cơ bản nó chỉ là một extension của Spring Framework giúp chúng ta loại bỏ các bước cấu hình phức tạp mà Spring bắt buộc.

Chúng ta có thể tạo một ứng dụng bằng Spring Boot và chạy nó chỉ trong vòng 5p, điều này phần nào tạo sự hứng thú cho người học khi vừa mới bắt đầu phải không nào. Với sự phát triển của Spring Boot đã góp phần cho hệ sinh thái Spring trở nên mạnh mẽ, hiệu quả và phổ biến hơn.

Hầu hết các ứng dụng Spring Boot cần rất ít cấu hình, bạn có thể sử tạo một ứng dụng Java và chạy bằng lệnh java -jar hoặc các cách triển khai ứng dụng khác đang hiện có trong Java. Spring boot cũng hỗ trợ một comand line tool để chạy các spring script.

Dưới đây là một số tính năng trong Spring Boot:

  • Các dependency ‘starter’ giúp đơn giản hoá cấu hình và xây dựng ứng dụng.
  • Dễ dàng deploy vì nó đã nhúng server container (Tomcat, Jetty hoặc Undertow) vào ứng dụng để tránh phức tạp khi triển khai lên môi trường production.
  • Hỗ trợ cấu hình tự động cho chức năng Spring – bất cứ khi nào có thể
  • Cung cấp các số liệu, kiểm tra và cho phép cấu hình ứng dụng từ bên ngoài.

Các yêu cầu về hệ thống của Spring Boot

Spring Boot phiên bản 2.4.0 yêu cầu phiên bản Java 8 trở lên tối đa là Java 15. Spring Framework 5.3.1 hoặc cao hơn cũng được yêu cầu.

Các công cụ hỗ trợ build mà spring boot có thể làm việc được là:

  • Maven – phiên bản 3.3 trở lên
  • Gradle – phiên bảng 6.3 hoặc cao hơn, 5.6.x cũng được hỗ trợ nhưng ở dạng cảnh báo.

Các servlet containers spring boot support:

Tomcat 9.0

4.0

Jetty 9.4

3.1

Undertow 2.0

4.0

Bạn cũng có thể triển khai các ứng dụng Spring Boot cho bất kỳ container nào tương thích với Servlet 3.1+.

Có cần học Spring trước khi học Spring Boot không?

Các bạn có thể trực tiếp học Spring Boot mà không cần học Spring =)) đùa thôi chứ Spring Boot chỉ là một extension của Spring thôi mà, nên khi bạn học Spring Boot là đã bao gồm Spring rồi đó nên cứ vào tài liệu của Spring Boot mà đọc thôi. Tuy nhiên đối với các thanh niên đã từng biết và làm Spring rồi thì sẽ cảm thấy rất nhẹ nhàng khi học Spring Boot. 

Cách một ứng dụng Spring Boot khởi chạy

Điểm đầu tiên khởi chạy trong ứng dụng Spring Boot là một class được đánh dấu @SpringBootApplication annotation.
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Mặc định, Spring Boot sẽ sử dụng embedded container để chạy ứng dụng, Trong trường hợp này, Spring Boot sử dụng public static void main là nơi để khởi chạy embedded web server. 

Ngoài ra, nó xử lý liên kết của cá Servlet, Filter và ServletContextInitializer từ application context đến embedded servlet container.
 
Một tính năng khác của Spring Boot là nó tự động quét tất cả các class trong cùng một package hoặc các package con của Main class để tìm các component.

Tạo project Spring Boot trong 5p

Với tất cả các ứng dụng Spring Boot, chúng ta nên bắt đầu với trang web Spring Initializr. Nó hỗ trợ chúng ta tạo ra một project Spring Boot chỉ bằng vài cú click chuột

Các bạn cần chọn:

  • Build tool sử dụng: Maven, Gradle.
  • Ngôn ngữ: Java, Koltin, Groody.
  • Phiên bản Spring boot và các thông tin của project như tên, mô tả, package etc. 

Sau khi chọn xong chúng ta chọn vào GENERATE để download mã nguồn về. Sau khi tải về các bạn có thể xem các dependency được sử dụng trong dự án ở file pom.xml nếu là dự án Maven trong như thế này

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>spring-boot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>spring-boot</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

Hoặc build.gradle nếu bạn chọn Gradle là build tool

plugins {
	id 'org.springframework.boot' version '2.3.3.RELEASE'
	id 'io.spring.dependency-management' version '1.0.8.RELEASE'
	id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}

test {
	useJUnitPlatform()
}

Tiếp theo chúng ta có thể tạo ra một ứng dụng Spring Boot đơn giản bằng cách tạo một class HelloController.java tại src/main/java/com/example/springboot/HelloController.java. Lưu ý đây chỉ là do mình đang để mặc định, nếu các bạn thay đổi cấu hình mặc định lúc khởi tạo thì điều chỉnh cho đúng nha. Cứ tạo làm sao nằm cùng cấp hoặc trong package con của hàm Main là được.

package com.example.springboot;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

	@RequestMapping("/")
	public String index() {
		return "Greetings from Spring Boot!";
	}

}

HelloController class được đánh dấu với @RestController annotation nghĩa là nó đã sẵn sàng được sử dụng bởi Spring MVC để xử lý request đến Server. @RequestMapping(“/”) chỉ ra endpoint của server khi người dùng yêu cầu đến đường dẫn “/” thì hàm index() sẽ được gọi.

Cuối cùng để khởi chạy ứng dụng các bạn có thể sử dụng cmd sau nếu dùng gradle.

./gradlew bootRun

Nếu maven thì 

./mvnw spring-boot:run

Nhưng hiện tại hầu hết các IDE hiện đại đều hỗ trợ chạy Spring Boot như Eclipse, Intellij, etc. Các bạn có thể chạy trực tiếp trên giao diện của các IDE này.

Để kiểm thử các bạn có thể sử dụng curl để request đến controller mà chúng ta đã tạo trước đó.

$ curl localhost:8080
Greetings from Spring Boot!

Kết bài

Như vậy là chúng ta đã tìm hiểu xong Spring Boot là gì rồi phải không nào. Hãy nhớ và phân biệt giữa Spring và Spring Boot các bạn nhé. Ở thời điểm hiện tại Spring Boot khá là mạnh, nếu các bạn có cơ hội tìm hiểu sâu vào thì sẽ thấy rằng nó đã support tận răng luôn rồi, code rất sướng,  thử đi nhé. 

Nguồn tham khảo

https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-introducing-spring-boot

https://www.baeldung.com/spring-vs-spring-boot

https://spring.io/guides/gs/spring-boot/

3.5 2 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x