Spring boot

什么是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-webspring-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
相关推荐
霸道流氓气质36 分钟前
Spring AI 多模态开发指南:图片理解与语音合成
java·人工智能·spring
en.en..41 分钟前
Linux mmap 内存映射深度解析:基于帧缓冲 /dev/fb0
java·服务器·前端
洋不写bug43 分钟前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
后台模板学习1 小时前
用 IM 即时聊天项目一次讲清消息去重算法的踩坑与解决方案
java·数据库·spring
秋名RG1 小时前
2026/6/15 系统故障复盘与整改方案
java·架构
今天要早睡_1 小时前
C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析
android·java·c++
南讯股份Nascent1 小时前
2026年CRM技术选型观察:当“数据打通“成为第一需求,电商CRM的架构价值在哪里
java·大数据·用户运营
心易行者1 小时前
Python自动化测试7步落地法:用python在线运行省掉90%环境配置时间
java·开发语言·人工智能·python·log4j·ai编程
霸道流氓气质2 小时前
Spring AI 技术细节:VectorStore 多库统一抽象
java·人工智能·spring
今天AI了吗2 小时前
Codex 配置自定义 AI API 完整指南:从零到一接入你的专属模型
java·人工智能·python·数据分析·embedding