我有一个自定义的PropertySource,它从外部源读取。我想在非Web和非spring-boot项目中将它注入Spring Environment
。
我认为有很多方法可以通过ApplicationContextInitializer
进行,但这似乎是特定于网络应用程序,因为注册涉及设置contextInitializerClasses
。
我的用例是小项目中的测试需要加载应用程序上下文并需要访问我的自定义属性源设置的属性。模拟这些值不是一种选择,我想找到一种方法在非Web项目中注册自定义PropertySource和Environment吗?
答案 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 "";
}
}
}