springboot + maven 使用资源占位符实现动态加载配置文件

发布于:2025-08-06 ⋅ 阅读:(10) ⋅ 点赞:(0)

第一步:Maven资源过滤(在pom.xml中启用资源过滤并定义runtime-profile变量)
      - - 因为要使用证书,所以这里需要单独设置某些资源不过滤;
      - - :不需要单独过滤,用第一个;需要单独过滤,用第二个。


<!-- 定义Profiles -->
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <runtime-profile>dev</runtime-profile>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault> <!-- 默认激活 -->
        </activation>
    </profile>
    <profile>
        <id>pro</id>
        <properties>
            <runtime-profile>pro</runtime-profile>
        </properties>
    </profile>
</profiles>

<!-- maven打包插件  -->
<build>
    <finalName>${project.artifactId}</finalName>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering> <!-- 开启过滤 -->
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<properties>
   <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.bjyc.frameworks.version>0.0.1-SNAPSHOT</org.bjyc.frameworks.version>
    <!-- 防止二进制文件被意外过滤 -->
    <maven.resources.nonFilteredFileExtensions>
        p12,pfx,cer,keystore,jks
    </maven.resources.nonFilteredFileExtensions>
</properties>


<!-- maven打包插件  -->
<build>
    <finalName>${project.artifactId}</finalName>
    <!-- 关键资源过滤配置 -->
    <resources>
        <!-- 处理需要过滤的文本资源 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>application*.properties</include>
                <include>application*.yml</include>
                <include>bootstrap*.properties</include>
                <include>bootstrap*.yml</include>
            </includes>
        </resource>

        <!-- 单独处理证书文件 - 关闭过滤 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering> <!-- 确保二进制无损 -->
            <includes>
                <include>wxcert/*.p12</include>
            </includes>
        </resource>

        <!-- 处理其他非过滤资源 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <excludes>
                <exclude>wxcert/*.p12</exclude>
                <exclude>application*.properties</exclude>
                <exclude>application*.yml</exclude>
                <exclude>bootstrap*.properties</exclude>
                <exclude>bootstrap*.yml</exclude>
            </excludes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 激活 profile 配置 -->
                <profiles>
                    <profile>${runtime-profile}</profile>
                </profiles>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

    <!-- 添加资源过滤扩展配置 -->
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <!-- 防止二进制文件被过滤 -->
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>p12</nonFilteredFileExtension>
                        <nonFilteredFileExtension>cer</nonFilteredFileExtension>
                        <nonFilteredFileExtension>keystore</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

第二步:配置 YAML 文件

#application.yml
spring:
  profiles:
    active: '@runtime-profile@'  # Maven 资源过滤将替换此占位符
#bootstrap.yml
spring:
  profiles:
    active: '@runtime-profile@'  # 与 application.yml 保持一致

第三步:在 IDEA 中使用 Maven Profiles,勾选指定的文件,如:‘dev’或者‘pro’

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到