如何从Maven属性获取Spring中@PropertySource的文件位置

时间:2018-01-31 20:03:34

标签: java spring maven

我有2个属性文件存储在resources文件夹中:qa.properties和dev.properties。

我指定了Maven属性'environment',这是应该加载的属性文件的名称。

 <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;
    }

}

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

更好的方法是只构建一个工件和/或应用程序,以便在任何环境中部署(qa,stage,load-test,prod,....)

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

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

如果您遵循这种方法,则不需要您之前描述的Config课程。

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

答案 2 :(得分:0)

为此,您必须将 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>