@ConfigurationProperties位置的最佳替代方案是什么?

时间:2017-02-18 03:46:46

标签: spring-boot

Spring引用false中不推荐使用

@ConfigurationProperties locations,现在1.4.x

中删除了该选项

我这样使用它:BucketTestConfig.java

就目前的弃用情况而言,我尝试为production codetest code设置系统属性1.5.x作为替代方案。

spring.config.location仍然失败,尽管我设置了系统属性。

在这种情况下,已弃用./gradlew clean test @ConfigurationProperties的最佳替代方法是什么?

UPDATE:

使用SpringApplicationBuilder.properties()在测试中不起作用(locations)。

使用SpringApplicationBuilder.listeners()也无法在测试(BucketTestRepositoryTests)中工作。

更新(第二次):

在我的案例中没有理由依赖BucketTestRepositoryTests,所以我选择了@ConfigurationProperties,如下所示:https://github.com/izeye/spring-boot-throwaway-branches/commit/a1290672dceea98706b1a258f8a17e2628ea01ee

因此,此问题的标题无效,可以删除此问题。

1 个答案:

答案 0 :(得分:0)

Follow this thread for more information.

基本上,这个帖子提出了两个选项

第一个选项是将spring.config.name设置为您要加载的文件列表:

new SpringApplicationBuilder(Application.class)
    .properties("spring.config.name=application,mine")
    .run(args);

第二个选项是添加侦听器

new SpringApplicationBuilder(SanityCheckApplication.class)
    .listeners(new LoadAdditionalProperties())
    .run(args);

LoadAdditionalProperties

的内容
@Component
public class LoadAdditionalProperties implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {

    private ResourceLoader loader = new DefaultResourceLoader();

    @Override
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
        try {
            Resource resource = loader.getResource("classpath:mine.properties");
            PropertySource<?> propertySource = new PropertySourcesLoader().load(resource);
            event.getEnvironment().getPropertySources().addLast(propertySource);
        } catch (IOException ex) {
            throw new IllegalStateException(ex);
        }
    }

}