在我较旧的Spring 4 Web应用程序中,我使用了applicationContext.xml文件,并且我的默认spring配置文件如下:
<beans profile="default">
<context:property-placeholder location="file:/opt/myapp/myapp-ws.properties" />
</beans>
现在我使用的是Spring 5 Framework,而不是Spring Boot 2.x,我想在我的Java Config类中做到这一点。
我的主要配置类如下:
@Configuration
@ComponentScan(basePackages = "com.tomholmes.myapp")
@EnableWebMvc
public class MyAppConfig
{
}
我有如下的AppInitializer;
public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
{
private static final Log logger = LogFactory.getLog(ApplicationInitializer.class);
@Override
protected Class<?>[] getRootConfigClasses()
{
return new Class[]
{ MyAppConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses()
{
return new Class[]{};
}
@Override
protected String[] getServletMappings()
{
return new String[]
{ "/api/*" };
}
}
由于有很多信息,所以我一直在网上进行研究,但是很多东西使Spring Boot显得难以为继,我只想要没有Spring Boot解决方案的Spring 5。我会继续寻找,我确信这是一个简单的问题。
谢谢!
答案 0 :(得分:0)
我相信这样可以解决问题:
@Configuration
public class PropertiesConfig {
@Bean
public PropertyPlaceholderConfigurer properties() {
final PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
final List<Resource> resources = new ArrayList<>();
resources.add(new FileSystemResource("/etc/app/application-{profile_1}.properties"));
resources.add(new FileSystemResource("/etc/app/application-{profile_2}.properties"));
ppc.setLocations(resourceLst.toArray(new Resource[]{}));
return ppc;
}
请注意,这仅是建议,此代码未经测试。
特定于配置文件的应用程序属性应由当前的活动配置文件自动解析。
答案 1 :(得分:0)
我尚未对此进行测试,但是同时具有@Configuration
和@Profile
的@PropertySource
类应该可以工作:
@Configuration
@Profile("default")
@PropertySource("file:/opt/myapp/myapp-ws.properties")
public class MyappWebservicePropertyConfig {
}