代码之家  ›  专栏  ›  技术社区  ›  Michael

在Spring引导中替换另一个项目的application.properties中的@variables@

  •  -2
  • Michael  · 技术社区  · 6 年前

    我们有一个 application.properties 一个项目中的文件:

      src
       |--- main
            |--- resources
                     |--- application.properties
    

    里面有一些 Maven project property @variables@ 初始化某些属性,如:

    info.app.branch=@branch.name@
    

    正如我通过一些实验和上述文档了解到的,这些被替换为 spring-boot-starter-parent 在它把它们复制到 target/classes/config .

    在依赖项目中,我们显式地复制 应用程序属性 使用 Maven dependency plugin .

    <artifactItem>
        <groupId>...</groupId>
        <artifactId>...</artifactId>
        <outputDirectory>${project.build.directory}/classes</outputDirectory>
        <includes>config/application.properties</includes>
    </artifactItem>
    

    因此,它已经在 目标/类/配置 目录,不替换 @变量 发生。

    如何确保弹簧引导正确替换这些变量?

    2 回复  |  直到 6 年前
        1
  •  1
  •   brass monkey    6 年前

    感觉有点尴尬,但您可以将“依赖项目”的资源目录指定为 outputDirectory . 例如:

    <artifactItem>
        <groupId>...</groupId>
        <artifactId>...</artifactId>
        <outputDirectory>${project.basedir}/src/main/resources</outputDirectory>
        <includes>config/application.properties</includes>
    </artifactItem>
    

    这样,我希望SpringBootMaven插件将它们视为项目的常规属性,并正确地替换变量。

        2
  •  0
  •   Michael    6 年前

    我们解决这个问题的方法是将配置文件移动到一个具有不同名称的目录中(我们刚刚称之为“config S ''。Maven依赖插件不会直接解包到 config :

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>process-tools-resources</id>
                <phase>process-resources</phase>
                <goals>
                    <goal>unpack</goal>
                </goals>
                <configuration>
                    <artifactItems>
                        <artifactItem>
                            <groupId>the-parent</groupId>
                            <artifactId>the-artifact</artifactId>
                            <outputDirectory>${project.build.directory}/classes</outputDirectory>
                            <includes>configs/application.properties</includes>
                        </artifactItem>
                    </artifactItems>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    然后我们使用maven资源插件从 configs 进入之内 配置 ,可以替代 @properties@ 对我们来说:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
            <execution>
                <id>process-properties-placeholders</id>
                <phase>process-resources</phase>
                <goals>
                    <goal>copy-resources</goal>
                </goals>
                <configuration>
                    <delimiters>
                        <delimiter>@</delimiter>
                    </delimiters>
                    <useDefaultDelimiters>false</useDefaultDelimiters>
                    <resources>
                        <resource>
                            <directory>${project.build.directory}/classes/configs</directory>
                            <filtering>true</filtering>
                        </resource>
                    </resources>
                    <outputDirectory>${project.build.directory}/classes/config</outputDirectory>
                </configuration>
            </execution>
        </executions>
    </plugin>