如何在非Web项目中将自定义Spring PropertySource注入到Environment中?

时间:2016-06-02 01:02:46

标签: spring

我有一个自定义的PropertySource,它从外部源读取。我想在非Web和非spring-boot项目中将它注入Spring Environment

我认为有很多方法可以通过ApplicationContextInitializer进行,但这似乎是特定于网络应用程序,因为注册涉及设置contextInitializerClasses

我的用例是小项目中的测试需要加载应用程序上下文并需要访问我的自定义属性源设置的属性。模拟这些值不是一种选择,我想找到一种方法在非Web项目中注册自定义PropertySource和Environment吗?

1 个答案:

答案 0 :(得分:0)

这可能不是一种非常优雅的方式。注册这样的组件。

@Component
public class ZkPropertySourceConfig implements EnvironmentAware, BeanFactoryPostProcessor {

    private Environment environment;

    @Override
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        if(environment instanceof ConfigurableEnvironment){
            ConfigurableEnvironment configurableEnvironment = (ConfigurableEnvironment) environment;
            configurableEnvironment.getPropertySources()
                    .addLast(new ZkPropertySource());
        }
    }

    public static class ZkPropertySource extends PropertySource<Void> {

        public ZkPropertySource() {
            super("zk");
        }

        @Override
        public String getProperty(String name) {
            //your code goes here
            return "";
        }
    }

}