Spring Boot入门教程介绍了如何快速搭建和开发Spring Boot应用,涵盖了从项目创建到运行测试的全过程。文章详细讲解了Spring Boot的自动配置、嵌入式服务器支持以及快速集成第三方库等功能。通过示例代码和配置文件,读者可以轻松上手并理解Spring Boot的基本使用方法。
Spring Boot简介Spring Boot 是一个基于 Spring 框架的开源微框架,旨在简化新 Spring 应用的初始搭建以及开发过程。Spring Boot 通过提供一套默认配置,帮助开发者快速搭建起步项目,并且可以自动配置大部分默认设置,使得开发过程更加便捷。
什么是Spring Boot
Spring Boot 是由 Pivotal 团队提供的一个框架,其设计目的是简化新 Spring 应用的初始搭建以及开发过程。通过使用 Spring Boot,你可以用更少的配置来创建独立的、生产级别的基于 Spring 的应用。Spring Boot 也支持使用嵌入式的 Web 服务器,如 Jetty 和 Tomcat,使得开发和部署变得更加简单。
Spring Boot的优势
Spring Boot 通过以下优势来简化开发过程:
- 自动配置:Spring Boot 通过约定优于配置的方式,自动配置了许多常见的场景,如数据库连接、缓存、邮件发送等,从而减少了开发人员的配置工作量。
- 无需 XML 配置:Spring Boot 采用 Java 配置,不需要繁琐的 XML 配置文件。
- 响应式开发:支持响应式编程风格,使用 Spring WebFlux 进行响应式 Web 应用开发。
- 嵌入式服务器:Spring Boot 可以内嵌 Tomcat、Jetty、Undertow 服务器,可以立即执行和部署。
- 独立运行:可以打包为可独立运行的应用,无需部署到 WAR 文件,可以直接运行。
- 开箱即用:提供了一系列可开箱即用的功能,如健康检查、监控、安全等。
- 快速集成:支持快速集成各种第三方库,如 MyBatis、JPA、Redis、RabbitMQ、WebSocket 等。
Spring Boot的适用场景
Spring Boot 适用于希望快速搭建应用、减少配置、专注于业务逻辑开发的场景。例如:
- 快速原型开发:当需要快速搭建应用原型进行演示或测试时,Spring Boot 提供了简便的开发模式。
- 微服务开发:对于构建微服务架构的应用,Spring Boot 提供了良好的支持。
- 单体应用:对于传统的单体应用,Spring Boot 也能够简化配置,提高开发效率。
- Rapid Application Development (RAD):适用于快速应用程序开发场景,减少时间成本。
- 企业级应用:企业级应用开发过程中,利用 Spring Boot 可以快速搭建开发环境,提高开发效率。
使用Spring Initializr创建项目
Spring Initializr 是一个在线工具,用于快速生成 Spring Boot 项目的骨架。它提供了多种语言和依赖选择,可以生成 Maven 或 Gradle 项目结构。
要使用 Spring Initializr 创建一个新的 Spring Boot 项目,请按照以下步骤操作:
- 访问 Spring Initializr 网站:https://start.spring.io/
- 选择项目的基本信息(例如项目名称、语言、依赖版本等)。
- 添加所需的依赖(例如 Web、Thymeleaf、JPA 等)。
- 点击“Generate”按钮,生成项目代码。
- 下载生成的压缩包,解压后导入到 IDE 中(例如 IntelliJ IDEA 或 Eclipse)。
示例:假设我们创建一个简单的 Web 项目,选择 Maven 作为构建工具,引入 web 和 Thymeleaf 依赖,生成的目录结构如下:
my-spring-boot-app/
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
    ├── main
        ├── java
        │   └── com
        │       └── example
        │           └── myapp
        │               ├── Application.java
        │               └── controller
        │                   └── HelloController.java
        └── resources
            ├── application.properties
            └── static
                └── css
                    └── styles.css项目结构解析
- my-spring-boot-app:项目根目录
- mvnw和- mvnw.cmd:Maven 的可执行文件,用于简化构建命令。
- pom.xml:Maven 的配置文件,包含项目的依赖信息。
- src/main/java:Java 源代码目录。- com.example.myapp.Application.java:项目的主入口类。
- com.example.myapp.controller.HelloController.java:一个简单的控制器类。
 
- src/main/resources:项目资源文件目录。- application.properties:应用配置文件。
- static:存放静态资源文件,如 css、js、html 等。
- templates:存放 Thymeleaf 模板文件。
- application.yml:可选的 YAML 格式的配置文件。
 
配置文件介绍
Spring Boot 使用 application.properties 或 application.yml 文件来保存配置信息。
示例配置文件 application.properties:
# 端口号
server.port=8080
# 数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
# 静态资源路径
spring.resources.static-locations=classpath:/static/,classpath:/public/
# 日志配置
logging.level.root=INFO
logging.level.com.example.myapp=DEBUG
# 其他配置
spring.messages.basename=i18n/messages创建Controller和Service
创建一个简单的 REST 控制器 (HelloController.java) 和一个服务 (HelloService.java)。
HelloController.java
package com.example.myapp.controller;
import com.example.myapp.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class HelloController {
    @Autowired
    private HelloService helloService;
    @GetMapping("/hello")
    public String hello() {
        return helloService.sayHello();
    }
}HelloService.java
package com.example.myapp.service;
import org.springframework.stereotype.Service;
@Service
public class HelloService {
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}运行并测试应用
- 
运行应用:启动 Spring Boot 应用,可以在 IDE 中直接运行 Application类的main方法,或者使用 Maven 命令mvn spring-boot:run运行。
- 测试应用:打开浏览器,访问 http://localhost:8080/hello/hello,应看到输出Hello, Spring Boot!。
Application.java
package com.example.myapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}日志和错误处理
日志配置
Spring Boot 的日志默认使用 Logback,可以通过修改 application.properties 中的配置来调整日志级别。
logging.level.root=INFO
logging.level.com.example.myapp=DEBUG错误处理
Spring Boot 提供了全局异常处理机制,可以通过创建一个全局异常处理器来捕获并处理异常。
package com.example.myapp.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}@SpringBootApplication注解
@SpringBootApplication 是一个组合注解,它包含了以下三个注解:
- @Configuration:标记该类是一个配置类。
- @EnableAutoConfiguration:启用自动配置。
- @ComponentScan:启用组件扫描。
示例:
package com.example.myapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}@Configuration注解
@Configuration 注解用于标记一个类作为配置类,可以包含若干 @Bean 方法,用于声明和配置 Spring 应用中的组件。
示例:
package com.example.myapp.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
    @Bean
    public HelloWorldService helloWorldService() {
        return new HelloWorldService();
    }
}配置文件中的常用属性
Spring Boot 支持使用 application.properties 或 application.yml 文件来配置应用的各种属性。
application.properties
# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 服务端口号
server.port=8080
# 其他配置
logging.level.root=INFOapplication.yml
server:
  port: 8080
spring:
  datasource:
  url: jdbc:mysql://localhost:3306/mydb
  username: root
  password: root
  driver-class-name: com.mysql.jdbc.Driver
logging:
  level:
    root: INFO添加数据库驱动依赖
在 pom.xml 中添加数据库驱动依赖,例如 MySQL 的依赖。
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>创建数据库连接
在 application.properties 中配置数据库连接信息。
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver实现简单的CRUD操作
创建一个简单的实体类 (User.java) 和对应的仓库接口 (UserRepository.java)。
User.java
package com.example.myapp.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    // getters and setters
}UserRepository.java
package com.example.myapp.repository;
import com.example.myapp.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}创建一个服务类来实现 CRUD 操作 (UserService.java)。
UserService.java
package com.example.myapp.service;
import com.example.myapp.model.User;
import com.example.myapp.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    public User createUser(User user) {
        return userRepository.save(user);
    }
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
    public void deleteUserById(Long id) {
        userRepository.deleteById(id);
    }
}创建一个控制器来暴露 REST 接口 (UserController.java)。
UserController.java
package com.example.myapp.controller;
import com.example.myapp.model.User;
import com.example.myapp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;
    @PostMapping("/create")
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }
    @GetMapping("/all")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
    @DeleteMapping("/{id}")
    public void deleteUserById(@PathVariable Long id) {
        userService.deleteUserById(id);
    }
}使用Thymeleaf模板引擎
Thymeleaf 是一个 Java 模板引擎,用于生成 XML、HTML 和纯文本内容。Spring Boot 中可以使用 Thymeleaf 作为视图解析器。
- 添加依赖:在 pom.xml中添加 Thymeleaf 依赖。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>- 创建模板文件:在 src/main/resources/templates目录下创建一个 HTML 模板文件index.html。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Thymeleaf Example</title>
</head>
<body>
    <h1 th:text="'Hello, ' + ${name} + '!'"></h1>
</body>
</html>- 创建控制器:创建一个控制器来渲染模板。
package com.example.myapp.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class ThymeleafController {
    @GetMapping("/")
    public String index(Model model) {
        model.addAttribute("name", "Spring Boot User");
        return "index";
    }
}静态资源管理和自定义错误页面
静态资源管理
Spring Boot 会自动解析 src/main/resources/static 目录下的静态资源文件,例如 CSS、JavaScript 和图片等。
自定义错误页面
可以在 src/main/resources/templates 目录下创建 error.html 文件来定义自定义错误页面。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Error Page</title>
</head>
<body>
    <h1>Oops, something went wrong!</h1>
    <p th:text="'Error Code: ' + ${status}"></p>
    <p th:text="'Error Message: ' + ${message}"></p>
</body>
</html>在控制器中返回错误代码。
package com.example.myapp.controller;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ErrorController {
    @GetMapping("/error")
    public ResponseEntity<String> error() {
        return new ResponseEntity<>("Oops, something went wrong!", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}使用Spring Boot Actuator监控应用
Spring Boot Actuator 提供了一系列管理和监控应用的端点,可以查看应用的运行状态、健康检查、环境信息等。
- 添加依赖:在 pom.xml中添加 Actuator 依赖。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>- 
访问 Actuator 端点:默认情况下,Actuator 端点位于 /actuator下,可以通过访问http://localhost:8080/actuator来查看可用的端点。
- 
常用端点: - health:显示应用的健康状态。
- info:显示应用的环境信息。
- metrics:显示应用的度量信息。
- env:显示应用的环境变量。
 
- 自定义Actuator端点:可以通过 application.properties或application.yml文件来配置 Actuator 的行为。
management.endpoints.web.exposure.include=health,info
management.endpoint.health.show-details=always这些配置项可以让 health 和 info 端点暴露在 Web 端点,并且显示详细的健康信息。
- 远程监控:可以通过配置 Spring Boot Admin 或其他监控工具来远程监控 Spring Boot 应用的状态。
通过这些配置和改造,可以大大增强应用的可管理性和可观测性。