springboot + maven 使用资源占位符实现动态加载配置文件
第一步: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’