Emi*_*Emi 3 java spring properties environment-variables
使用Spring我需要某种环境(dev | test | prod)特定属性.
我只有一个配置文件(myapp.properties),由于某些原因,我不能有多个配置文件(即使spring可以处理多个).
所以我需要添加带有前缀的属性
dev.db.user=foo
prod.db.user=foo
Run Code Online (Sandbox Code Playgroud)
并告诉应用程序使用哪个前缀(环境)与VM-argument -Denv-target或类似的东西.
我为此目的使用了一个子主题PropertyPlaceholderConfigurer:
public class EnvironmentPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
private static final String ENVIRONMENT_NAME = "targetEnvironment";
private String environment;
public EnvironmentPropertyPlaceholderConfigurer() {
super();
String env = resolveSystemProperty(ENVIRONMENT_NAME);
if (StringUtils.isNotEmpty(env)) {
environment = env;
}
}
@Override
protected String resolvePlaceholder(String placeholder, Properties props) {
if (environment != null) {
String value = props.getProperty(String.format("%s.%s", environment, placeholder));
if (value != null) {
return value;
}
}
return super.resolvePlaceholder(placeholder, props);
}
}
Run Code Online (Sandbox Code Playgroud)
并在applicationContext.xml(或任何其他弹簧配置文件)中使用它:
<bean id="propertyPlaceholder"class="EnvironmentPropertyPlaceholderConfigurer">
<property name="location" value="classpath:my.properties" />
</bean>
Run Code Online (Sandbox Code Playgroud)
在my.properties您可以定义属性,如:
db.driverClassName=org.mariadb.jdbc.Driver
db.url=jdbc:mysql:///MyDB
db.username=user
db.password=secret
prod.db.username=prod-user
prod.db.password=verysecret
test.db.password=notsosecret
Run Code Online (Sandbox Code Playgroud)
因此,您可以通过环境键(例如prod)为属性键添加前缀.
使用vm参数,targetEnvironment您可以选择您喜欢使用的环境,例如-DtargetEnvironment=prod.
如果不存在特定于环境的属性,则选择默认属性(不带前缀).(您应该始终定义默认值.)
| 归档时间: |
|
| 查看次数: |
7282 次 |
| 最近记录: |