
下面是一个 Java Spring Boot 项目从创建到上线的完整流程梳理,我会分为 6 个主要阶段:

1. 项目创建与初始化
(1) 创建项目
方式一:使用 Spring Initializr
选择依赖:Spring Web、Spring Data JPA、MySQL Driver、Lombok 等
生成项目并解压
方式二:使用 IDE(IntelliJ IDEA)
File → New → Project → Spring Initializr
方式三:命令行创建
curl https://start.spring.io/starter.zip -d dependencies=web,data-jpa,mysql \
-d type=maven-project -d groupId=com.example -d artifactId=myapp -o myapp.zip
(2) 项目结构
myapp/
├── src/
│ ├── main/
│ │ ├── java/com/example/myapp/
│ │ │ ├── MyappApplication.java # 主启动类
│ │ │ ├── controller/ # 控制器层
│ │ │ ├── service/ # 服务层
│ │ │ ├── repository/ # 数据访问层
│ │ │ └── model/ # 实体类
│ │ └── resources/
│ │ ├── application.properties # 配置文件
│ │ ├── static/ # 静态资源
│ │ └── templates/ # 模板文件
│ └── test/ # 测试代码
├── pom.xml # Maven 配置文件
└── .gitignore # Git 忽略规则
2. 本地开发
(1) 配置开发环境
数据库:配置 application-dev.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update
API 测试:使用 Postman 或 Swagger
添加依赖:springdoc-openapi-starter-webmvc-ui
(2) 核心开发
使用分层架构:
// Controller 示例
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getUsers() {
return userService.getAllUsers();
}
}
(3) 本地运行
mvn spring-boot:run
# 或
./mvnw spring-boot:run
3. 测试阶段
(1) 单元测试
使用 JUnit 5 + Mockito
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
void testGetUserById() {
when(userRepository.findById(1L)).thenReturn(Optional.of(new User()));
assertNotNull(userService.getUserById(1L));
}
}
(2) 集成测试
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
@Test
void shouldReturnUsers() throws Exception {
mockMvc.perform(get("/api/users"))
.andExpect(status().isOk());
}
}
(3) 测试覆盖率
使用 JaCoCo 插件(pom.xml 配置)
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.8</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
生成报告:mvn test → target/site/jacoco/index.html
4. 构建与打包
(1) 生产环境配置
application-prod.properties:
server.port=8080
spring.profiles.active=prod
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}
(2) 打包应用
可执行 JAR(推荐):
mvn clean package -DskipTests
# 生成文件:target/myapp-0.0.1-SNAPSHOT.jar
WAR 包(如需部署到外部 Tomcat):
<!-- pom.xml 修改 -->
<packaging>war</packaging>
(3) Docker 化(可选)
# Dockerfile
FROM openjdk:17-alpine
COPY target/myapp-*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
构建镜像:
docker build -t myapp:1.0 .
5. 部署上线
(1) 服务器准备
最小化要求:
OS:Linux (Ubuntu/CentOS)
Java:JDK 17+
数据库:MySQL/PostgreSQL
防火墙开放端口:8080(应用)、3306(DB)
(2) 部署方式
方式一:直接运行 JAR
java -jar myapp-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
方式二:使用 Systemd 托管
# /etc/systemd/system/myapp.service
[Unit]
Description=My Spring Boot App
After=syslog.target
[Service]
User=appuser
ExecStart=/usr/bin/java -jar /opt/myapp/myapp.jar
SuccessExitStatus=143
Environment="DB_URL=jdbc:mysql://db-server:3306/proddb"
Environment="DB_USER=produser"
Environment="DB_PASS=prodpwd"
[Install]
WantedBy=multi-user.target
操作命令:
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
方式三:Docker 部署
docker run -d -p 8080:8080 \
-e DB_URL=jdbc:mysql://host.docker.internal:3306/proddb \
-e DB_USER=produser \
-e DB_PASS=prodpwd \
--name myapp myapp:1.0
6. 运维与监控
(1) 基础监控
添加 Actuator 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
监控端点:/actuator/health, /actuator/metrics
(2) 日志管理
使用 Logback 配置日志轮转:
<!-- resources/logback-spring.xml -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
(3) 告警与 APM
集成方案:
监控:Prometheus + Grafana
链路追踪:Zipkin/SkyWalking
日志:ELK Stack
关键注意事项
环境隔离:严格区分 dev/test/prod 配置
安全规范:
禁止明文密码(使用环境变量 / 配置中心)
启用 HTTPS
使用 Spring Security 做权限控制
CI/CD:集成 Jenkins/GitLab CI
# .gitlab-ci.yml 示例
build:
stage: build
script:
- mvn clean package -DskipTests
deploy_prod:
stage: deploy
script:
- scp target/*.jar user@server:/opt/myapp/
- ssh user@server "sudo systemctl restart myapp"
回滚方案:保留历史版本 JAR,快速切换
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。