最终 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
相关推荐
用户3777967210962 小时前
RabbitMQ Unacked 消息深度解析:机制、问题与解决方案
spring boot·rabbitmq
南囝coding2 小时前
100% 用 AI 做完一个新项目,从 Plan 到 Finished 我学到了这些
前端·后端
Homeey2 小时前
深入理解ThreadLocal:从原理到架构实践的全面解析
java·后端
ANGLAL2 小时前
27.短链系统
java
shykevin2 小时前
Rust入门
开发语言·后端·rust
Lisonseekpan3 小时前
Git 命令大全:从基础到高级操作
java·git·后端·github·团队开发
CodeCraft Studio3 小时前
国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)
java·pdf·excel·spire.xls·文档格式转换·csv转pdf
学历真的很重要3 小时前
LangChain V1.0 Messages 详细指南
开发语言·后端·语言模型·面试·langchain·职场发展·langgraph
申阳3 小时前
Day 7:05. 基于Nuxt开发博客项目-首页开发
前端·后端·程序员