【问题标题】:How to get file location for @PropertySource in Spring from Maven property如何从 Maven 属性获取 Spring 中 @PropertySource 的文件位置
【发布时间】:2023-03-12 06:02:01
【问题描述】:

我在资源文件夹中存储了 2 个属性文件:qa.properties 和 dev.properties。

我指定了 Maven 属性“环境”,这是应该加载的属性文件的名称。

 <properties>
        <environment>qa</environment>
 </properties>

我想根据 maven 变量加载所需的属性,但是@PropertySource 没有看到 maven 变量。如何将“环境”属性从 Maven 传递到 @PropertySource?

@Configuration
@PropertySource("classpath:${environment}.properties")
public class Config {

    @Autowired
    private Environment env;

    public Environment getEnv() {
        return env;
    }

    public void setEnv(Environment env) {
        this.env = env;
    }

}

【问题讨论】:

  • 你没有。 Maven 属性是构建时的。 Spring 是运行时的。你需要让你的构建部署一个不同的文件,以供 Spring 看到。
  • 您应该研究的是 spring 提供的profile feature,这将允许您根据活动配置文件有条件地实例化 bean。

标签: java spring maven


【解决方案1】:

也许您可以为此目的使用特定于配置文件的属性,例如 application-qa.properties,并在 application.properties 中使用spring.profiles.active=qa 激活它更多https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

【讨论】:

    【解决方案2】:

    不要在构建时使用 Maven 属性执行此操作。这种方法迫使您为每个环境构建一个工件,这不是一个好的做法。

    更好的方法是只构建一个工件和/或应用程序以部署在任何环境(质量保证、阶段、负载测试、产品......)中

    一种方法是将您的属性文件命名为application-test.propertiesapplication-xxxxx.properties 并将您的应用程序运行为:

    java -Dspring.profiles.active=qa myapp.jar

    如果您采用这种方法,则不需要您之前描述的 Config 类。

    这应该可以帮助您入门。请注意,您必须包含不同环境的属性文件,但这也可以解决。看看12 factor-app

    【讨论】:

    • 目前我使用 spring profile-specific 属性实现了逻辑。当我使用以下命令指定配置文件时它工作正常:-Dspring.profiles.active=qa。但是,当未指定配置文件时,将使用默认配置文件。如何指定默认配置文件不每次都写入 -Dspring.profiles.active=qa?
    • 您可以将spring.profiles.active=qa 添加到bootstrap.properties
    • 我将 spring.profiles.active=@environment@ 添加到 application.properties,现在我的应用程序使用 Maven 'environment' 属性中指定的配置文件运行。
    • 这将是来自 Maven 的默认环境,从 Maven 传递值是值得商榷的。但是如果你想在另一个环境中运行同一个应用程序,你可以使用 -Dspring.profiles.active=stage 而无需再次编译和生成另一个二进制文件。
    【解决方案3】:

    为此,您必须将您的 environment 属性指定为 System 属性。 Maven Surefire 插件 可以帮助您:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${surefire.version}</version>
        <configuration>
            <systemPropertyVariables>
                <environment>QA</environment>
            </systemPropertyVariables>
        </configuration>
    </plugin>
    

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 2014-07-21
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 2013-05-07
      • 1970-01-01
      • 2018-02-15
      相关资源
      最近更新 更多