한다고 가정 genericDirectory
자리 컴파일 타임에 알 수없는 다음과 같은 봄 구성을 갖는 런타임에 자리 값을 추가합니다봄
@Configuration
@PropertySource("${genericDirectory}/additional.properties")
public class SomeConfiguration{
//...
}
내가 컨텍스트를 새로 고침하기 전에 속성을 추가하려고 노력을하지만, 여전히 얻을 예외
public static BeanFactory createContext(String genericDirectoryName) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
Properties props = new Properties();
props.setProperty("genericDirectory", genericDirectoryName);
configurer.setProperties(props);
applicationContext.addBeanFactoryPostProcessor(configurer);
applicationContext.register(SomeConfiguration.class);
applicationContext.refresh(); // throws IllegalArgumentException: Could not resolve placeholder 'genericDirectory'
return applicationContext;
}
또한 부모 컨텍스트에서 속성을 설정하고 setParent
메서드를 통해 자식에게 전달하려고했지만 성공하지 못했습니다 (동일한 예외가 발생했습니다).
런타임에 ApplicationContext에 속성을 추가하는 방법을 보여주십시오.
추신. 이 경우에는 숨겨진 구성이 없습니다. 컨텍스트는 그대로 수동으로 생성됩니다.
결코 작동하지 않습니다. '@ PropertySource' 주석의 자리 표시자는 환경 변수와 시스템 변수에 대해서만 다른 속성과 비교해서 해석됩니다. 따라서 'System.setProperty'를 설정하여 해결해야합니다. 또는'@ PropertySource'를 사용하는 대신 전달 된 속성을 기반으로 수동으로'ResourcePropertySource'를 추가하십시오. –
@ M.Denium, 정말 고마워요! 'System.setProperty' 또한 허용되는 방법입니다. 원한다면 코멘트가 답이 될 수 있습니다. – diziaq