最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置

Spring Boot 2.7.18(最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置

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
相关推荐
q***51897 小时前
Spring Boot中Tomcat配置
spring boot·tomcat·firefox
V***u4537 小时前
【学术会议论文投稿】Spring Boot实战:零基础打造你的Web应用新纪元
前端·spring boot·后端
喵叔哟8 小时前
6.配置管理详解
后端·python·flask
yuuki2332338 小时前
【C++】类和对象(上)
c++·后端·算法
曾经的三心草8 小时前
基于正倒排索引的Java文档搜索引擎3-实现Index类-实现搜索模块-实现DocSearcher类
java·python·搜索引擎
韩数8 小时前
小白也能看懂! 今年爆火的 MCP 协议究竟是什么?写给普通人的 MCP 指南
后端·aigc·mcp
A***F1578 小时前
SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)
spring boot·tomcat·mybatis
l***46688 小时前
SSM与Springboot是什么关系? -----区别与联系
java·spring boot·后端
稚辉君.MCA_P8_Java8 小时前
Gemini永久会员 快速排序(Quick Sort) 基于分治思想的高效排序算法
java·linux·数据结构·spring·排序算法
I***t7168 小时前
【MyBatis】spring整合mybatis教程(详细易懂)
java·spring·mybatis