Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Boot动态上下文创建(父/子)_Spring_Spring Boot_Spring Integration_Ioc Container - Fatal编程技术网

Spring Boot动态上下文创建(父/子)

Spring Boot动态上下文创建(父/子),spring,spring-boot,spring-integration,ioc-container,Spring,Spring Boot,Spring Integration,Ioc Container,我将Spring Boot与Spring集成在一起,我希望为每个子()加载不同的属性。这可能吗 此时此刻,我正在处理以下问题:(只有最相关的行) 我已经查看了SpringApplicationBuilderchild()方法,并且属性从父对象传播到子对象: child.properties(this.defaultProperties).environment(this.environment) .additionalProfiles(this.additionalProfiles); 但我需

我将Spring Boot与Spring集成在一起,我希望为每个
子()加载不同的属性。这可能吗

此时此刻,我正在处理以下问题:(只有最相关的行)

我已经查看了SpringApplicationBuilder
child()
方法,并且属性从父对象传播到子对象:

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集成组件将从配置文件动态加载。因此,我需要用动态组件创建不同的上下文

任何想法都将不胜感激,谢谢

编辑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()
方法之前为空,并引发一个NPE

编辑2:(工作)

我绝对不明白的最后一件事是,为什么我需要一个父上下文,即使我所有的
@组件
@配置
都是Spring集成组件,并且可以作为
子组件加载(
)。父上下文是否是放置总线/或组件以与不同子级通信的位置?我猜想这可能是一个内存问题,为每个上下文加载几个单例。

这应该可以

SpringApplicationBuilder child = builder.child(ConfigDynamic.class);
...
child.context().getEnvironment().getPropertySources().addLast(pps);
...
child.run();
这应该有用

SpringApplicationBuilder child = builder.child(ConfigDynamic.class);
...
child.context().getEnvironment().getPropertySources().addLast(pps);
...
child.run();
child()引发空指针异常。我更新了问题。child()引发空指针异常。我更新了问题。
SpringApplicationBuilder child = builder.child(ConfigDynamic.class);
...
child.context().getEnvironment().getPropertySources().addLast(pps);
...
child.run();