我正在使用Spring, Java, Ant
网络应用程序。我正在使用Spring分析来加载基于enironment的属性。以下是样本
@Profile("dev")
@Component
@PropertySource("classpath:dev.properties")
public class DevPropertiesConfig{
}
@Profile("qa")
@Component
@PropertySource("classpath:qa.properties")
public class TestPropertiesConfig {
}
@Profile("live")
@Component
@PropertySource("classpath:live.properties")
public class LivePropertiesConfig{
}
在 web.xml 中,我们可以提供个人资料
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
现在,我的查询是针对创建单独Java类所需的每个环境。
问题:是否可以只有一个类提供个人资料名称作为@Profile({profile})
之类的绑定参数。
另外,如果还有其他更好的选择可以实现相同目的,请告诉我。
答案 0 :(得分:0)
一次可以激活多个配置文件,因此没有一个属性可以获取活动配置文件。一般解决方案是创建ApplicationContextInitializer
,基于活动配置文件加载其他配置文件。
public class ProfileConfigurationInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
public void initialize(final ConfigurableApplicationContext ctx) {
ConfigurableEnvironment env = ctg.getEnvironment();
String[] profiles = env.getActiveProfiles();
if (!ArrayUtils.isEmpty(profiles)) {
MutablePropertySources mps = env.getPropertySources();
for (String profile : profiles) {
Resource resource = new ClassPathResource(profile+".properties");
if (resource.exists() ) {
mps.addLast(profile + "-properties", new ResourcePropertySource(resource);
}
}
}
}
}
这样的事情应该可以解决问题(当我从头顶输入错误时可能包含错误)。
现在在您的web.xml
中添加一个名为contextInitializerClasses
的上下文参数,并为其指定初始值设定项的名称。
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>your.package.ProfileConfigurationInitializer</param-value>
</context-param>