什么是Spring Boot?
Spring Boot是一个基于Spring框架的开源Java开发框架,旨在简化Spring应用程序的初始化和配置。Spring Boot通过提供默认配置和自动化依赖管理,减少了开发者在项目搭建和配置上的工作量,使其能够快速启动和运行Spring应用。
Spring Boot的核心特性
自动配置
Spring Boot会根据项目依赖自动配置Spring应用程序。例如,如果项目中引入了H2数据库依赖,Spring Boot会自动配置内存数据库的相关参数,开发者无需手动配置。
起步依赖(Starter Dependencies)
Spring Boot提供了一系列预定义的依赖包(如spring-boot-starter-web
、spring-boot-starter-data-jpa
),简化了依赖管理。这些依赖包会自动引入相关库及其兼容版本,避免了版本冲突问题。
嵌入式服务器
Spring Boot内置了Tomcat、Jetty或Undertow等嵌入式服务器,无需单独部署WAR文件到外部服务器。应用程序可以直接打包成可执行的JAR文件运行。
Actuator
Spring Boot Actuator提供了生产级监控和管理功能,如健康检查、指标收集、HTTP追踪等,方便运维人员监控应用程序状态。
创建Spring Boot项目
使用Spring Initializr
访问Spring Initializr网站,选择Maven或Gradle构建工具,添加所需的依赖(如Web、JPA、Security等),生成项目模板并下载。
通过IDE创建
主流IDE(如IntelliJ IDEA、Eclipse)支持直接创建Spring Boot项目。在IntelliJ IDEA中,选择File > New > Project
,然后选择Spring Initializr
,按向导操作即可。
命令行创建
通过curl
命令从Spring Initializr生成项目:
curl https://start.spring.io/starter.zip -d dependencies=web -d type=maven-project -o demo.zip
运行Spring Boot应用
使用Maven
在项目根目录执行以下命令:
mvn spring-boot:run
使用Gradle
在项目根目录执行以下命令:
gradle bootRun
直接运行JAR文件
打包后运行生成的JAR文件:
mvn package
java -jar target/demo-0.0.1-SNAPSHOT.jar
常用注解
@SpringBootApplication
标记主类,组合了@Configuration
、@EnableAutoConfiguration
和@ComponentScan
。
@RestController
标记类为Spring MVC控制器,返回JSON/XML响应。
@RequestMapping
定义请求映射路径,支持HTTP方法(GET、POST等)。
@Autowired
自动注入依赖的Bean。
@Entity
标记JPA实体类,对应数据库表。
配置文件
application.properties
传统配置文件格式,例如:
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/test
application.yml
YAML格式配置文件,例如:
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
数据库集成
JPA与Hibernate
添加spring-boot-starter-data-jpa
依赖,配置数据源后,定义实体类和Repository接口:
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
}
public interface UserRepository extends JpaRepository<User, Long> {}
JDBC
使用JdbcTemplate
直接操作数据库:
@Autowired
private JdbcTemplate jdbcTemplate;
public List<User> findAll() {
return jdbcTemplate.query("SELECT * FROM user", (rs, rowNum) ->
new User(rs.getLong("id"), rs.getString("name")));
}
异常处理
@ControllerAdvice
全局异常处理类,捕获并统一处理异常:
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseBody
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity.status(500).body(e.getMessage());
}
}
测试
单元测试
使用@SpringBootTest
加载完整Spring上下文:
@SpringBootTest
class DemoApplicationTests {
@Autowired
private UserRepository userRepository;
@Test
void contextLoads() {
assertNotNull(userRepository);
}
}
MockMvc测试控制器
模拟HTTP请求测试REST接口:
@AutoConfigureMockMvc
@SpringBootTest
class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testGetUser() throws Exception {
mockMvc.perform(get("/user/1"))
.andExpect(status().isOk());
}
}
部署
Docker化
创建Dockerfile打包镜像:
FROM openjdk:17
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
构建并运行容器:
docker build -t demo-app .
docker run -p 8080:8080 demo-app
云平台部署
Spring Boot应用可直接部署到云平台(如AWS、Azure、Heroku)。Heroku示例:
heroku create
git push heroku main