Hướng dẫn lập trình Spring Boot cho người mới bắt đầu

1- Spring Boot là gì?

Spring Boot là một Project nằm trên tầng IO Execution (Tầng thực thi) của Spring IO Framework.

Spring Boot là một bước tiếp theo của Spring, để làm cho Spring dễ dàng hơn trong việc thiết lập và phát triển ứng dụng. Với Spring Boot các cấu hình Spring được giảm thiểu tối đa. Spring Boot hỗ trợ các bộ chứa nhúng (embedded containers) điều này cho phép các ứng dụng web có thể chạy độc lập mà không cần phải trên khai lên các Web Server.

Bạn có thể dùng spring boot để tạo ứng dụng Java Web chạy bằng command line 'java -jar' hoặc xuất khẩu ra file war để triển khai lên Web Server như thông thường. Spring Boot cung cấp cho bạn một "CLI Tool" để chạy các kịch bản Spring (spring scripts).
Spring Boot có thể giải thích một cách đơn giản bởi hình minh họa dưới đây:

Dưới đây là các lợi ích của Spring Boot:

  1. Nó rất dễ dàng để phát triển các ứng dụng dựa trên Spring với Java hoặc Groovy.
  2. Nó giảm thiểu thời gian phát triển và tăng năng xuất
  3. Nó tránh việc phải viết nhiều mã nguyên mẫu (boilerplate Code), Annotations và các cấu hình XML.
  4. Nó dễ dàng để bạn tương tác các ứng dụng Spring Boot với các hệ sinh thái của Spring như Spring JDBC, Spring ORM, Spring Data, Spring Security etc.
  5. Nó đi theo cách tiếp  cận “Nguyên tắc cấu hình mặc định” để giảm thiểu thời gian và nỗ lực cần thiết để phát triển ứng dụng.
  6. Nó cung cấp các Server nhúng (Embedded HTTP servers) như là Tomcat, Jetty .... để phát triển và test các ứng dụng web nhanh chóng và dễ dàng.
  7. Nó cung cấp công cụ CLI (Command Line Interface) dể phát triển và test các ứng dụng Spring Boot(Java hoặc Groovy) từ các dòng lệnh (command prompt) rất dễ dàng và nhanh chóng.
  8. Nó cung cấp rất nhiều các plugin để phát triển và test các ứng dụng Spring Boot nhanh chóng sử dụng các công cụ Build như Maven Gradle
  9. Nó cung cấp nhiều plugin để làm việc với các cơ sở dữ liệu nhúng (embedded database)  và các cơ sở dữ liệu lưu trữ trên bộ nhớ (in-memory Databases) một cách dễ dàng.

2- Mục tiêu của tài liệu

Tài liệu được viết dựa trên:
  • Eclipse 4.7 (Oxygen)

  • Spring Boot 2.x

Trong tài liệu này tôi sẽ tạo một ứng dụng Hello Spring Boot, nó là một ứng dụng Web đơn giản sử dụng Spring Boot, và sẽ chạy ứng dụng này một cách độc lập mà không cần phải triển khai lên Web Server.

Spring Tool Suite (STS)

Để xây dựng các ứng dụng Spring Boot trên IDE Eclipse bạn cần phải cài đặt Spring Tool Suite, đây là một Plugin mở rộng hỗ trợ cho lập trình Spring trên Eclipse.

Nếu bạn chưa cài đặt, hãy xem hướng dẫn tại đây:

3- Tạo Spring Boot Project

Trên Eclipse tạo một project sử dụng Spring Tool Suite (STS):
  • File/New/Other...
  • Name: HelloSpringBoot
  • Group: org.o7planning
  • Artifact: HelloSpringBoot
  • Package: org.o7planning.hellospringboot
Project đã được tạo ra, dưới đây là cấu trúc mặc định của Project.

4- Một vài giải thích về Spring Boot

Ở bước trên bạn vừa tạo ra một Spring Boot Project, hãy xem nội dung pom.xml:

pom.xml

Có 3 điểm cần chú ý trong pom.xml (1),(2), (3) như hình minh họa dưới đây, Spring Boot giúp bạn đơn giản hơn trong việc khai báo các thư viện Spring.

spring-boot-starter-parent

spring-boot-starter-parent là một project sẵn có trong Spring Boot. Các thư viện phụ thuộc cơ bản đã được khai báo trong spring-boot-starter-parent, project của bạn chỉ cần thừa kế nó. Chỉ cần khai báo <parent> trong file pom.xml của project của bạn.
** spring-boot-starter-parent **
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.M6</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
Bạn có thể ghi đè các phụ thuộc mặc định của Spring Boot. Chủ đề này được nói rõ hơn tại đây:
  • TODO

spring-boot-starter-web

Các "Starter" khác chỉ đơn giản là cung cấp phụ thuộc mà bạn có khả năng cần thiết khi phát triển một loại hình cụ thể của ứng dụng. Chẳng hạn khi bạn phát triển một ứng dụng web, bạn cần một phụ thuộc  spring-boot-starter-web.
<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>
   </dependency>

</dependencies>

spring-boot-maven-plugin

Spring-boot-maven-plugin là plugin cung cấp các thư viện cần thiết giúp project của bạn có thể chạy trực tiếp mà không cần triển khai trên một Web Server. Nó giúp tạo ra một file jar có thể thực thi (Executable)
<plugins>

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

        <!-- ... -->

</plugins>

5- Chạy Spring Boot project

Ở bước trên bạn đã tạo ra HelloSpringBoot project bởi Eclipse & Spring Tool Suite, và chưa có bất kỳ thay đổi nào. Tất cả mọi thứ được tạo ra mặc định. Bây giờ bạn cần một vài bước để chạy ứng dụng.
Ứng dung HelloSpringBoot của bạn đã chạy, bạn có thể chạy thử đường dẫn:
Có thông báo lỗi "404 Not found" khi bạn chạy đường dẫn trên, tuy nhiên không có vấn đề gì nghiêm trọng bởi vì project của bạn chưa có bất kỳ trang nào.
Tạo file style.css trong thư mục static:
style.css

h1 {
    color: red;
}
Và chạy lại ứng dụng với đường dẫn:

Run Configuration...

Bạn có thể thay đổi các thông số cho Server chẳng hạn cổng, contextPath,... Các vấn đề này được đề cập tại phần phụ lục ở cuối tài liệu này.

6- Spring Boot chạy thế nào?

Khi bạn tạo một "Spring Boot Web Appp", có 1 class được tạo ra (generate) bởi công cụ "Spring Tool Suite":
  • HelloSpringBootApplication

Ứng dụng của bạn được bắt đầu bởi việc thực thi class HelloSpringBootApplication. Class này được chú thích bởi @SpringBootApplication.
HelloSpringBootApplication.java
package org.o7planning.hellospringboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloSpringBootApplication.class, args);
    }
}
 
Chú thích @SpringBootApplication là tương đương với việc sử dụng @Configuration, @EnableAutoConfiguration@ComponentScan với các thuộc tính mặc định của chúng.
Như vậy @SpringBootApplication giúp bạn tự động cấu hình Spring, và tự động quét (Scan) toàn bộ project để tìm ra các thành phần Spring (Controller, Bean, Service,...)

7- Các công nghệ cho tầng View

Bài học tiếp theo:

8- Phụ lục: Cấu hình Server

Ở trên bạn đã chạy ứng dụng Spring Boot, bạn có thể thay đổi các các cấu hình Server, chẳng hạn Port, contextPath, ....
Thay đổi Server HTTP Port:
Bạn có thể thay đổi các thuộc tính khác nếu muốn, Eclipse sẽ gợi ý các thuộc tính có thể thay đổi và ý nghĩa của chúng.