스프링 통합을 Spring 통합과 함께 사용하고 있으며 각 child()
컨텍스트마다 다른 속성을로드하고 싶습니다. 이것이 가능한가? 이 순간 스프링 부트 동적 컨텍스트 생성 (부모/자식)
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()
. 부모 컨텍스트가 다른 아이들과 의사 소통하기 위해 버스 또는 컴포넌트를 넣을 수있는 장소입니까? 나는 각 상황에 대해 여러 싱글 톤을로드하는 메모리 문제 일 수 있습니다.
아이는() 널 포인터 예외를 발생시킵니다. 나는 그 질문을 갱신했다. – crm86