我有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;
}
}
答案 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.properties
,application-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>