解决 SpringCloud 中 bootstrap.yml 不识别 @activatedProperties@ 参数

在 Spring 项目中,我们经常使用 maven 变量来切换不用的环境,例如本文中的 @activatedProperties@ 参数,在 maven 打包时传入不用的参数,使得配置文件可以在多种运行环境中进行切换。

在 Spring 项目中,我们经常使用 maven 变量来切换不用的环境,例如本文中的 @activatedProperties@ 参数,在 maven 打包时传入不用的参数,使得配置文件可以在多种运行环境中进行切换。 今天我遇到的问题是在 SpringCloud 中的 bootstrap.yml 文件使用了 @activatedProperties@ 参数,但是无论我怎么重新打包,这个 @activatedProperties@ 参数都没有被替换,直接原样的输出到打包文件中了,造成程序无法运行。 使用 Maven Filtering Maven filtering 是 Maven 构建过程中的一个功能,它可以在构建过程中动态地替换文件中的属性。 例如,您可以在项目的配置文件中定义一个属性,然后在文件中使用该属性。在构建过程中,Maven 将替换该属性为它的实际值。 所以我们需要修改 pom.xml 中的 build 节点,增加 filtering 配置,配置如下:

<build>
    <finalName>${project.artifactId}</finalName>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.yml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

这样在构建过程中,Maven 将替换文件中的属性为其实际值。 如果你还有更多的疑问,建议阅读官方文档:https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html