Java SpringBoot 框架
SpringBoot 是 Spring 框架的一个扩展项目,旨在简化 Spring 应用的初始搭建和开发过程。
SpringBoot 通过"约定优于配置"的理念,让开发者能够快速启动和运行 Spring 应用程序。
SpringBoot 的核心特点
- 自动配置:根据项目中添加的 jar 依赖自动配置 Spring 应用
- 独立运行:内嵌 Tomcat、Jetty 或 Undertow 等服务器,无需部署 WAR 文件
- 简化依赖管理:通过 starter 依赖简化 Maven/Gradle 配置
- 生产就绪:提供指标、健康检查和外部化配置等功能
- 无需代码生成:不需要 XML 配置
SpringBoot 的核心组件
1. SpringBoot Starter
SpringBoot Starter 是一组方便的依赖描述符,可以一站式获取所需的所有技术。例如:
spring-boot-starter-web
:用于构建 web 应用spring-boot-starter-data-jpa
:用于 JPA 数据库访问spring-boot-starter-test
:用于测试
2. SpringBoot AutoConfiguration
SpringBoot 会根据 classpath 中的 jar 包自动配置应用程序。例如,如果 classpath 中有 H2 数据库,SpringBoot 会自动配置内存数据库。
3. SpringBoot Actuator
提供生产级功能,帮助监控和管理应用程序:
- 应用健康检查
- 指标收集
- HTTP 追踪
- 环境信息
创建第一个 SpringBoot 应用
1. 使用 Spring Initializr 创建项目
访问 start.spring.io,选择:
- Maven 项目
- Java 语言
- 最新 SpringBoot 版本
- 添加 "Web" 依赖
2. 项目结构
典型的 SpringBoot 项目结构:
src/ main/ java/ com/example/demo/ DemoApplication.java # 主启动类 resources/ application.properties # 配置文件 test/ java/ com/example/demo/ DemoApplicationTests.java # 测试类
3. 编写简单 REST 控制器
实例
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, SpringBoot!";
}
}
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, SpringBoot!";
}
}
4. 运行应用
运行 DemoApplication
类中的 main
方法,应用将在默认端口 8080 启动。
访问 http://localhost:8080/api/hello
将看到返回的 "Hello, SpringBoot!" 消息。
SpringBoot 配置
1. 配置文件
SpringBoot 支持多种配置方式:
application.properties
application.yml
- 环境变量
- 命令行参数
示例 application.properties
:
实例
server.port=9090
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
2. 多环境配置
可以为不同环境创建不同的配置文件:
application-dev.properties
:开发环境application-prod.properties
:生产环境
通过 spring.profiles.active
指定激活的环境:
实例
spring.profiles.active=dev
SpringBoot 数据访问
1. 使用 Spring Data JPA
添加依赖:
实例
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
定义实体类:
实例
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getters and setters
}
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getters and setters
}
创建 Repository 接口:
实例
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
}
List<User> findByName(String name);
}
在服务层使用:
实例
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> getUsersByName(String name) {
return userRepository.findByName(name);
}
}
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> getUsersByName(String name) {
return userRepository.findByName(name);
}
}
SpringBoot 最佳实践
- 分层架构:遵循 Controller-Service-Repository 分层
- 异常处理:使用
@ControllerAdvice
全局异常处理 - 日志记录:使用 SLF4J 记录日志
- 单元测试:为业务逻辑编写充分的测试
- API 文档:集成 Swagger 生成 API 文档
示例:全局异常处理
实例
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleResourceNotFound(ResourceNotFoundException ex) {
ErrorResponse error = new ErrorResponse(
"NOT_FOUND",
ex.getMessage()
);
return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
}
}
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleResourceNotFound(ResourceNotFoundException ex) {
ErrorResponse error = new ErrorResponse(
"NOT_FOUND",
ex.getMessage()
);
return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
}
}
SpringBoot 进阶主题
- Spring Security:认证和授权
- Spring Cloud:微服务架构
- Spring Batch:批处理
- WebFlux:响应式编程
- Docker 集成:容器化部署
SpringBoot 通过简化配置和提供开箱即用的功能,大大提高了 Java 应用程序的开发效率。它是现代 Java 开发中不可或缺的框架之一。
点我分享笔记