【发布时间】:2019-06-15 22:26:55
【问题描述】:
question 关于添加多个 tomcat 连接器并将它们绑定到每个单独的控制器的能力很好。
安迪威尔金森的好答案的精髓就在这里:
public static void main(String[] args) {
SpringApplicationBuilder parentBuilder
= new SpringApplicationBuilder(ApplicationConfiguration.class);
parentBuilder.child(ServiceOneConfiguration.class)
.properties("server.port:8080").run(args);
parentBuilder.child(ServiceTwoConfiguration.class)
.properties("server.port:8081").run(args);
}
我想继续问另一个问题:
有没有办法让每个子应用程序上下文读取一些特定于子应用程序的属性,并支持所有标准 spring-boot 的功能,例如配置文件后缀文件名等。
实现它的一种假设方法:
拥有三个独立的属性文件:
application.propertieschild1.propertieschild2.properties
并且能够为每个上下文设置一个文件。
但对我来说重要的是,它们必须支持所有 spring-boot 魔法。例如,如果我像传递命令行参数--spring.profiles.active=dev 一样激活新配置文件,那么不仅应该自动加载这三个文件(每个上下文一个),而且还应该自动加载另一组文件(如果它们存在):
application-dev.propertieschild1-dev.propertieschild2-dev.properties
当然,这些文件应该按照定义的顺序等在标准 spring-boot 支持的路径中搜索。
如果有一些编码的盒子有可能吗?
实现它的另一种假设方式
只有一个application.properties 文件(支持配置文件等),但以某种方式将前缀属性映射到子上下文的无前缀属性。
例子:
child1.server.port=8081
child1.foo=bar
child2.server.port=8082
child2.foo=baz
第一个子上下文应该看到这些属性,就像它们只是:
server.port=8081
foo=bar
第二个子上下文应该看到这些属性,就像它们只是:
server.port=8082
foo=baz
因此,标准 spring-boot 的自动配置将起作用并正确设置 tomcat 的端口等。
我不是在寻找具体的方法(但如果你问我,我倾向于第二种方法),但任何开箱即用的工作或可通过最少的条件实现的方法都足以满足我的需求。
【问题讨论】:
-
理论上将值设置为
spring.config.name的application,child1应该可以解决问题。否则,您可以尝试将其作为参数传递给run方法。
标签: java spring spring-boot