Spring Boot 2.7.18(最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置
- [Spring Boot 2.7.18(最终 2.x 系列版本)2 - 框架搭建](#Spring Boot 2.7.18(最终 2.x 系列版本)2 - 框架搭建)
-
- 技术选型
- [pom 配置](#pom 配置)
- 多环境配置文件配置
-
- [通用配置 application.yml](#通用配置 application.yml)
- 开发环境:application-dev.yml
- 测试环境:application-test.yml
- 生产环境:application-prod.yml
- 多环境数据源配置
-
- [开发 / 测试数据源:datasource-dev.yml / datasource-test.yml](#开发 / 测试数据源:datasource-dev.yml / datasource-test.yml)
- 生产数据源:datasource-prod.yml
Spring Boot 2.7.18(最终 2.x 系列版本)2 - 框架搭建
技术选型
- 数据连接池双配置策略 :
- 开发 / 测试环境:使用 Druid,方便看 SQL、监控
- 生产环境:使用 HikariCP,追求性能
- 接口文档:Knife4j,前端需要直接看文档且希望导出 Word/PDF
pom 配置
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- ========================================================= -->
<!-- 🔹 项目信息 -->
<!-- ========================================================= -->
<groupId>cn.hao.kai</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>0.0.1</version>
<name>spring-boot-demo</name>
<description>Spring Boot 2.7.18 多环境 Demo 工程</description>
<!-- ========================================================= -->
<!-- 🔹 父工程(Spring Boot 官方) -->
<!-- ========================================================= -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/>
</parent>
<!-- ========================================================= -->
<!-- 🔹 属性配置 -->
<!-- ========================================================= -->
<properties>
<!-- JDK 版本 -->
<java.version>1.8</java.version>
<!-- ===== 核心依赖版本 ===== -->
<spring-boot.version>2.7.18</spring-boot.version>
<mybatis-plus.version>3.5.14</mybatis-plus.version>
<freemarker.version>2.3.34</freemarker.version>
<druid.version>1.2.27</druid.version>
<hikari.version>5.1.0</hikari.version>
<jasypt.version>3.0.5</jasypt.version>
<lombok.version>1.18.42</lombok.version>
<knife4j.version>4.5.0</knife4j.version>
<!-- ===== 插件版本 ===== -->
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.5.4</maven-surefire-plugin.version>
<!-- ===== 编码与测试控制 ===== -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<skipTests>true</skipTests>
</properties>
<!-- ========================================================= -->
<!-- 🔹 依赖管理 -->
<!-- ========================================================= -->
<dependencies>
<!-- 基础依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Web 模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 数据库层 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Druid(开发/测试环境使用) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- HikariCP(生产环境使用) -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>${hikari.version}</version>
</dependency>
<!-- MyBatis Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- 于 v3.5.9 起,PaginationInnerInterceptor 已分离出来。如需使用,则需单独引入 mybatis-plus-jsqlparser 依赖 -->
<!-- https://baomidou.com/plugins/pagination/ -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- Jasypt 加密工具 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>${jasypt.version}</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<!-- Knife4j OpenAPI 文档 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- 测试模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- ========================================================= -->
<!-- 🔹 插件配置 -->
<!-- ========================================================= -->
<build>
<plugins>
<!-- Spring Boot 打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!-- 测试插件(跳过测试) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<skipTests>${skipTests}</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<!-- ========================================================= -->
<!-- 🔹 多环境配置 -->
<!-- ========================================================= -->
<profiles>
<!-- 🧪 开发环境 -->
<!-- 使用 Druid 数据源,打印 SQL,便于调试 -->
<!-- 打包命令:
mvn clean package -Pdev -->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
<!-- 🧩 测试环境 -->
<!-- 使用 Druid 数据源,可启用 SQL 监控,但关闭控制台调试 -->
<!-- 打包命令:
mvn clean package -Ptest -->
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
</profile>
<!-- 🚀 生产环境 -->
<!-- 使用 HikariCP 数据源,追求性能与稳定 -->
<!-- 打包命令:
mvn clean package -Pprod -->
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
</project>
多环境配置文件配置
目录结构如下

通用配置 application.yml
bash
spring:
application:
name: spring-boot-demo-2.7.18
profiles:
active: dev
# Mybatis-Plus配置
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
global-config:
db-config:
logic-delete-field: deleted # 全局逻辑删除的实体字段名,默认值为deleted
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
开发环境:application-dev.yml
yaml
spring:
config:
# 导入开发环境模块化连接池配置
import: "classpath:datasource/datasource-dev.yml"
# 日志级别
logging:
level:
root: INFO
cn.hao.kai: DEBUG
测试环境:application-test.yml
yaml
spring:
config:
# 导入测试环境模块化连接池配置
import: "classpath:datasource/datasource-test.yml"
# 日志级别
logging:
level:
root: INFO
cn.hao.kai: DEBUG
生产环境:application-prod.yml
yaml
spring:
config:
# 导入生产环境模块化连接池配置
import: "classpath:datasource/datasource-prod.yml"
# 日志级别
logging:
level:
root: WARN
cn.hao.kai: INFO
多环境数据源配置
由于数据库连接池的参数较多,因此将数据源的配置单独拆出来,放置在独立的配置文件中进行引入的方式。
开发 / 测试数据源:datasource-dev.yml / datasource-test.yml
yaml
spring:
datasource:
# ========================= 开发环境 Druid 数据源 =========================
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&useSSL=true&rewriteBatchedStatements=true&allowMultiQueries=true
username: root
password: root
druid:
# ---------- 连接池基础配置 ----------
initial-size: 10 # 初始连接数
min-idle: 10 # 最小空闲连接数
max-active: 150 # 最大连接数
max-wait: 60000 # 最大等待时间(ms)
min-evictable-idle-time-millis: 1800000
max-evictable-idle-time-millis: 25200000
time-between-eviction-runs-millis: 60000
test-on-borrow: false
test-on-return: false
test-while-idle: true
validation-query: SELECT 1
# ---------- 监控配置 ----------
stat-view-servlet:
enabled: true
url-pattern: /druid/* # Druid 控制台访问路径
login-username: druid
login-password: druid
reset-enable: true
allow: "" # 允许所有
deny: "" # 拒绝为空
# ---------- SQL / 日志监控 ----------
filter:
stat:
enabled: true
merge-sql: true
slow-sql-millis: 3000
wall:
enabled: false
db-type: mysql
slf4j:
enabled: true
# ---------- Web 监控过滤器 ----------
web-stat-filter:
enabled: true
session-stat-enable: false
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
url-pattern: /*
可以访问 druid 监控 :http://localhost:8080/druid/login.html

生产数据源:datasource-prod.yml
yaml
spring:
datasource:
# ========================= 生产环境 HikariCP 数据源 =========================
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://prod-db:3306/demo?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&useSSL=true&rewriteBatchedStatements=true&allowMultiQueries=true
username: prod_user
password: prod_password
hikari:
pool-name: HikariPool
maximum-pool-size: 30
minimum-idle: 10
idle-timeout: 30000
connection-timeout: 10000
max-lifetime: 1800000
auto-commit: true