Spring 5 Java配置设置默认配置文件

时间:2019-05-28 15:17:51

标签: java spring

在我较旧的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。我会继续寻找,我确信这是一个简单的问题。

谢谢!

2 个答案:

答案 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 {
}