2016-08-23 7 views
1

스프링 통합을 Spring 통합과 함께 사용하고 있으며 각 child() 컨텍스트마다 다른 속성을로드하고 싶습니다. 이것이 가능한가? 이 순간 스프링 부트 동적 컨텍스트 생성 (부모/자식)

, 나는이 함께 일하고 : (가장 관련성 라인) 나는 SpringApplicationBuilder child() 방법을 검토 한

SpringApplicationBuilder parent = new SpringApplicationBuilder(Main.class); 
// Child sources (Will be inside a loop) 
// Load the different environment ?? 
parent.child(ConfigDynamic.class); 
// End of child loading 

parent.run(args); 

과 속성은 아이에게 아버지로부터 전파됩니다

child.properties(this.defaultProperties).environment(this.environment) 
.additionalProfiles(this.additionalProfiles); 

하지만 다음의 예와 같이 동적으로 일부 속성을로드해야합니다

AnnotationConfigApplicationContext parent = new AnnotationConfigApplicationContext(Main.class); 
parent.setId("parent"); 
Properties props = new Properties(); 
StandardEnvironment env = new StandardEnvironment(); 
AnnotationConfigApplicationContext child = new AnnotationConfigApplicationContext(); 
child.setId("child" + ++n); 
child.setParent(parent); 
child.register(ConfigDynamic.class);   
// populate properties for this adapter 
props.setProperty("prop1", myProp1); 
props.setProperty("prop2", myProp2); 
env.getPropertySources().addLast(pps); 
child.setEnvironment(env); 
child.refresh(); 

다음 예에서 추출 : Spring multiple imapAdapter

이유는 일부 Spring 통합 구성 요소가 구성 파일에서 동적으로로드되기 때문입니다. 따라서 동적 구성 요소와 다른 컨텍스트를 만들어야합니다.

어떤 생각을 이해할 수있을 것이다

, 감사합니다

편집 1 : 나는 예를 업데이트

:

SpringApplicationBuilder parent = new SpringApplicationBuilder(Main.class); 

for start  
SpringApplicationBuilder child = parent.child(DynamicConfig.class);  

//Properties creation.. 
child.context().getEnvironment().getPropertySources().addLast(pps); 
child.run(args);  
end for 

parent.run(args); 

그러나 이제 child() 문맥 run() 방법 및 인상하기 전에 널 (null)입니다 NPE.

편집 2 : 내 모든 @Component@Configuration 봄 통합 구성 요소로드 할 수있는 경우에도 부모 컨텍스트 필요한 이유 (작업)을

SpringApplicationBuilder parent = new SpringApplicationBuilder(Main.class); 

for start  
SpringApplicationBuilder child = parent.child(DynamicConfig.class);  

PropertiesPropertySource pps = new PropertiesPropertySource("dynamicProps", props); 
StandardEnvironment env = new StandardEnvironment(); 
env.getPropertySources().addLast(pps); 
child.environment(env); 
child.run();  
end for 

parent.run(args); 

확실히 이해하지 않는 마지막이다 child(). 부모 컨텍스트가 다른 아이들과 의사 소통하기 위해 버스 또는 컴포넌트를 넣을 수있는 장소입니까? 나는 각 상황에 대해 여러 싱글 톤을로드하는 메모리 문제 일 수 있습니다.

답변

0

이 작동합니다 ...

SpringApplicationBuilder child = builder.child(ConfigDynamic.class); 
... 
child.context().getEnvironment().getPropertySources().addLast(pps); 
... 
child.run(); 
+0

아이는() 널 포인터 예외를 발생시킵니다. 나는 그 질문을 갱신했다. – crm86