Java Spring Boot框架从入门到实战全方面深入详解
一、Spring Boot 核心概念
-
Spring Boot 是什么?
- 基于Spring框架的快速开发脚手架,简化配置、依赖管理和部署流程。
- 核心特性:自动配置(Auto-Configuration)、起步依赖(Starter Dependencies)、Actuator监控。
-
Spring Boot 与 Spring MVC 的区别
对比维度 Spring Boot Spring MVC 配置方式 约定优于配置(自动配置) 需要手动配置XML或Java Config 依赖管理 通过Starter简化依赖 需手动管理所有依赖 部署方式 内嵌Tomcat/Jetty,打包为可执行JAR 需部署到外部Web容器(如Tomcat)
二、环境搭建与第一个Spring Boot项目
-
开发环境要求
- JDK 11+、Maven/Gradle、IDE(IntelliJ IDEA或Eclipse)
-
快速创建项目
- 通过 Spring Initializr 生成项目骨架:
# 示例:生成Web + JPA + H2项目 curl https://start.spring.io/starter.zip -d dependencies=web,data-jpa,h2 -o demo.zip
- 通过 Spring Initializr 生成项目骨架:
-
项目结构解析
src/ ├── main/ │ ├── java/ │ │ └── com/example/demo/ │ │ ├── DemoApplication.java # 启动类 │ │ ├── controller/ # 控制层 │ │ ├── service/ # 服务层 │ │ └── repository/ # 数据访问层 │ └── resources/ │ ├── application.properties # 配置文件 │ └── static/ # 静态资源 └── test/ # 测试代码
三、Spring Boot 核心功能详解
-
自动配置原理
- 通过
@SpringBootApplication
触发@EnableAutoConfiguration
,扫描META-INF/spring.factories
加载配置。 - 示例:内嵌数据库H2的自动配置流程:
@ConditionalOnClass({ H2ConsoleProperties.class, WebServlet.class }) @AutoConfigureAfter(DataSourceAutoConfiguration.class) public class H2ConsoleAutoConfiguration { ... }
- 通过
-
配置文件与多环境切换
- 优先级:
application.properties
>application-{profile}.properties
- 配置示例:
# application-dev.properties spring.datasource.url=jdbc:h2:mem:dev server.port=8081 # application-prod.properties spring.datasource.url=jdbc:mysql://localhost:3306/prod server.port=80
- 激活环境:
java -jar app.jar --spring.profiles.active=prod
- 优先级:
-
常用注解速查
注解 作用 @RestController
声明RESTful控制器 @RequestMapping
映射HTTP请求路径 @Configuration
标记配置类 @Bean
声明由Spring管理的Bean @Value
注入配置文件中的属性值
四、数据访问实战:整合JPA与MyBatis
-
Spring Data JPA
- 核心接口:
JpaRepository<T, ID>
- 代码示例:
@Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; // Getters & Setters } public interface UserRepository extends JpaRepository<User, Long> { List<User> findByNameContaining(String keyword); }
- 核心接口:
-
整合MyBatis-Plus
- 依赖配置:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency>
- 动态SQL示例:
@Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user WHERE name LIKE #{keyword}") List<User> searchUsers(@Param("keyword") String keyword); }
- 依赖配置:
五、构建RESTful API
-
API设计规范
- HTTP方法:GET(查询)、POST(新增)、PUT(更新)、DELETE(删除)
- 状态码:200(成功)、201(已创建)、400(参数错误)、404(资源不存在)
-
全局异常处理
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<ErrorResponse> handleException(Exception ex) { ErrorResponse error = new ErrorResponse(500, "服务器内部错误"); return ResponseEntity.status(500).body(error); } }
-
Swagger接口文档
- 依赖配置:
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> </dependency>
- 启用Swagger:
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.demo")) .build(); } }
- 依赖配置:
六、安全与权限控制
-
整合Spring Security
- 核心配置:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/api/public/**").permitAll() .antMatchers("/api/admin/**").hasRole("ADMIN") .anyRequest().authenticated() .and().formLogin().and().httpBasic(); } }
- 核心配置:
-
JWT认证实战
- 生成Token:
public String generateToken(UserDetails userDetails) { return Jwts.builder() .setSubject(userDetails.getUsername()) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000)) .signWith(SignatureAlgorithm.HS512, SECRET_KEY) .compact(); }
- 生成Token:
七、测试与部署
-
单元测试与集成测试
- 示例:Service层测试:
@SpringBootTest class UserServiceTest { @Autowired private UserService userService; @Test void testCreateUser() { User user = new User("John"); User savedUser = userService.createUser(user); assertNotNull(savedUser.getId()); } }
- 示例:Service层测试:
-
Docker容器化部署
- Dockerfile示例:
FROM openjdk:17-jdk-slim VOLUME /tmp COPY target/demo-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
- 构建命令:
docker build -t demo-app . docker run -p 8080:8080 demo-app
- Dockerfile示例:
-
性能监控(Spring Boot Actuator)
- 启用端点:
management.endpoints.web.exposure.include=health,info,metrics management.endpoint.health.show-details=always
- 访问地址:
http://localhost:8080/actuator/health
- 启用端点:
八、实战项目:用户管理系统
-
功能需求
- 用户注册/登录(含JWT认证)
- 用户信息增删改查(RESTful API)
- 分页查询与数据导出(Excel)
-
技术栈
- 前端:Vue.js + Element UI
- 后端:Spring Boot + JPA + Spring Security
- 数据库:MySQL + Redis(缓存)
-
核心代码片段
// 分页查询接口 @GetMapping("/users") public Page<User> getUsers( @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { return userService.findAll(PageRequest.of(page, size)); }
九、常见问题与解决方案
问题场景 | 解决方案 |
---|---|
启动时报BeanCreationException | 检查依赖是否冲突,使用mvn dependency:tree 分析依赖树 |
配置文件不生效 | 确认文件名为application.properties ,且位于src/main/resources 目录 |
数据库连接超时 | 调整连接池参数:spring.datasource.hikari.connection-timeout=30000 |
跨域请求(CORS)被拦截 | 添加@CrossOrigin 注解或全局CORS配置 |
十、延伸学习与资源推荐
-
官方文档
-
推荐书籍
- 《Spring Boot实战》- Craig Walls
- 《Spring微服务实战》- John Carnell
-
社区资源
- Stack Overflow的Spring Boot标签
- GitHub上的Spring Boot Samples
通过系统学习与实战演练,您将能够快速掌握Spring Boot的核心技术栈,并构建高效、可靠的企业级应用。