You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot打包时能否将application.properties属性替换到resources资源文件

结论

该需求完全可以实现,默认替换不生效是因为Maven默认没有开启JSON、XML等格式资源文件的占位符过滤,补充对应构建配置即可达到预期效果。

具体配置步骤

1. 开启资源目录的过滤规则

在项目pom.xml的<build>节点下添加资源配置,指定需要做占位符替换的文件类型,同时排除二进制文件避免被损坏:

<build>
    <resources>
        <!-- 开启指定类型文本资源的占位符替换 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.json</include>
                <include>**/*.xml</include>
                <include>**/*.yml</include>
                <include>**/*.yaml</include>
            </includes>
        </resource>
        <!-- 其余资源不做过滤,避免二进制文件被破坏 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <excludes>
                <exclude>**/*.properties</exclude>
                <exclude>**/*.json</exclude>
                <exclude>**/*.xml</exclude>
                <exclude>**/*.yml</exclude>
                <exclude>**/*.yaml</exclude>
            </excludes>
        </resource>
    </resources>

2. 加载application.properties中的属性供构建阶段使用

因为你定义的propA.url是写在application.properties中,不是直接定义在pom.xml的属性节点里,需要添加插件让Maven在构建初始化阶段读取该文件的属性值:

<plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>src/main/resources/application.properties</file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
注意事项
  • 如果项目中resources目录下存放了图片、字体、二进制证书等文件,必须按上述配置把这类文件排除在过滤范围外,否则构建过程会把二进制文件当文本处理,导致文件损坏无法使用
  • 如果担心${}格式的占位符和Spring运行时的占位符规则冲突,可以自定义构建阶段的占位符分隔符,比如改成@属性名@格式,添加如下配置即可:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <delimiters>
            <delimiter>@</delimiter>
        </delimiters>
        <useDefaultDelimiters>false</useDefaultDelimiters>
    </configuration>
</plugin>

调整后资源文件里的占位符对应写成"url": "@propA.url@"即可。

配置完成后执行mvn clean package命令构建,查看target/classes目录下对应的JSON文件,就能看到占位符已经被替换为http://localhost,符合预期效果。

内容的提问来源于stack exchange,提问作者AntonBoarf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:24:15