首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java Spring Boot 项目从创建到上线的完整流程梳理

Java Spring Boot 项目从创建到上线的完整流程梳理

原创
作者头像
imtoken
发布2025-11-25 15:20:24
发布2025-11-25 15:20:24
460
举报

下面是一个 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 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档