本文将带领你快速入门Spring Boot框架学习,详细介绍Spring Boot的基本概念、优点以及与传统Spring的区别。通过本文,你将学会如何快速搭建Spring Boot项目,并掌握其核心配置和实战开发技巧。此外,还将介绍Spring Boot项目的部署方法和一些常见的调试技巧。
Spring Boot 是由 Pivotal 团队提供的框架,其主要目标是简化 Spring 应用程序的初始搭建以及开发过程。Spring Boot 可以用来快速搭建独立运行的 Spring 项目。它基于约定大于配置的原则,通过使用默认配置使开发人员可以快速搭建项目,而无需手动配置常见的框架。
spring-boot-maven-plugin
和 spring-boot-gradle-plugin
,可以简化打包和运行应用的过程。<!-- pom.xml --> <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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
// App.java package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } // HelloController.java package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello, Spring Boot!"; } }
Spring Boot 通过自动配置机制,根据类路径中的依赖来推断应用的配置,并自动配置特定的 Spring bean。默认情况下,Spring Boot 会根据类路径中的依赖自动配置合理的默认设置。
# application.properties server.port=8080
Spring Boot 提供了多个 Starter
依赖,以帮助快速集成各种功能。例如,spring-boot-starter-web
依赖包含了构建 Web 应用所需的所有依赖。
Spring Boot 支持多种配置文件格式,如:application.properties
和 application.yml
。
# application.yml server: port: 8080 spring: application: name: demo-app profiles: active: local
使用 Spring Boot 创建一个简单的 RESTful 服务。
// HelloController.java package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello, Spring Boot!"; } }
使用 Spring Boot 集成 MySQL 数据库。
<!-- pom.xml --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
# application.properties spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=secret spring.jpa.hibernate.ddl-auto=update
// User.java package com.example.demo; 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.demo; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { }
// UserService.java package com.example.demo; 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 List<User> getAllUsers() { return userRepository.findAll(); } }
// UserController.java package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public List<User> getUsers() { return userService.getAllUsers(); } }
Spring Boot 提供了多种日志框架的支持,如:Logback、Log4j2 和 JDK Logging。默认情况下,Spring Boot 使用 Logback。
# application.properties logging.level.root=INFO logging.level.com.example.demo=DEBUG
Spring Boot 提供了 Spring Boot Actuator
模块,可以方便地监控应用的状态,如:内存使用情况、线程池状态、HTTP 请求追踪等。
<!-- pom.xml --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
配置 actuator:
# application.properties management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always
使用 Maven 打包 Spring Boot 应用:
mvn clean package
生成的 jar 文件位于 target
目录下。
Dockerfile
:# Dockerfile FROM openjdk:11-jre-slim COPY target/demo-0.0.1-SNAPSHOT.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
docker build -t springboot-demo .
docker run -p 8080:8080 springboot-demo
ssh root@your.server.ip
scp target/demo-0.0.1-SNAPSHOT.jar root@your.server.ip:/opt/app.jar
java -jar /opt/app.jar
@SpringBootApplication
注解所在的类是应用程序的主类。--debug
参数,可以启用调试模式并输出详细的启动信息。java -jar -Ddebug=true target/demo-0.0.1-SNAPSHOT.jar
logging.level
来调整不同包的输出级别,以帮助定位问题。# application.properties logging.level.root=DEBUG logging.level.org.springframework=DEBUG