現在、私のアプリケーションは、コンマで区切られたさまざまなプロパティを持つプロパティ ファイルをロードします。
property=propertyA,propertyB,propertyC
プロパティファイルをロードし、アプリケーションプロパティとして次のように割り当てるコードがあります。
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
private String[] properties;
private PropertySource propertySource;
public WebAppInitializer() {
propertySource = getPropertySource();
String propertyStr = (String) propertySource.getProperty("property");
List<String> list = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(propertyStr));
properties = list.toArray(new String[list.size()]);
}
}
// @Override
public void onStartup(ServletContext ctx) throws ServletException {
super.onStartup(ctx);
}
protected WebApplicationContext createRootAppContext() {
Class[] configClasses = this.getRootConfigClasses();
if (!ObjectUtils.isEmpty(configClasses)) {
AnnotationConfigWebApplicationContext rootAppContext = new AnnotationConfigWebApplicationContext();
MyPropertySource.addToEnvironment(rootAppContext.getEnvironment());
rootAppContext.getEnvironment().getPropertySources().addFirst(propertySource);
rootAppContext.getEnvironment().setActiveProfiles(properties);
rootAppContext.register(configClasses);
return rootAppContext;
} else {
return null;
}
}
protected WebApplicationContext createServletAppContext() {
AnnotationConfigWebApplicationContext servletAppContext = new AnnotationConfigWebApplicationContext();
servletAppContext.getEnvironment().setActiveProfiles(properties);
Class[] configClasses = this.getServletConfigClasses();
if (!ObjectUtils.isEmpty(configClasses)) {
servletAppContext.register(configClasses);
}
return servletAppContext;
}
}
現在、これらのプロパティを Db に移行しており、DB からロードしたいと考えています。最初に、以下のコードを追加することを考えました:
@Autowired
PropertyRepository propertyRepository;
public WebAppInitializer() {
List<String> listDB = propertyRepository.getProperties();
if(listDB.isEmpty()) {
propertySource = getPropertySource();
String propertyStr = (String) propertySource.getProperty("property");
List<String> list = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(propertyStr));
properties = list.toArray(new String[list.size()]);
}
}
//Other pieces of code
}
ただし、PropertyRepository は常に null になります。Spring はまだアプリケーションを初期化していないと思います。ここで何か見逃しましたか?または、私が従うべき他の方法はありますか?これらのプロパティに基づいて初期化されたさまざまな機能があるため、この段階でプロパティをロードする必要があります。