【发布时间】:2020-09-28 08:34:49
【问题描述】:
所以我必须在同一个tomcat服务器中部署同一个springboot应用作为多个应用。
例如/app1/app2/app3。
除了数据源配置之外,它们共享大部分相同的配置。
我一直在寻找一种基于servlet-context 或类似的东西来外部化数据源配置的方法。
使用 springs 外部化配置,我可以让它为 all 应用程序加载 相同 外部数据源文件,但它们需要不同。例如。
@PropertySource(value = "file:${HOME}/datasource-override.properties", ignoreResourceNotFound=false)
使用嵌入式tomcat模式,即通过.\gradlew bootRun我想我可以实现它。
我只需要使用以下内容作为该配置文件的 application.properties 设置 server.context-path 属性。 (因为这是一个单一的应用程序)例如。
@PropertySource(value = "file:${HOME}/${server.context-path}/datasource-override.properties", ignoreResourceNotFound=false),
四处搜索,我认为它可能类似于(和组合)以下内容,但它不起作用。例如
@PropertySource(value = "file:${HOME}/${server.servlet.context-path}/datasource-override.properties", ignoreResourceNotFound=false)
到目前为止,我发现的所有示例都处理嵌入式 tomcat 或单个应用程序的单个外部化属性文件。
理想情况下,我希望它在自己的目录中找到文件
file:${HOME}/${server.servlet.context-path}/datasource.properties
因此,对于这三个应用程序,它将类似于以下内容,它从部署的上下文中检测其属性文件的位置。例如:
file:${HOME}/app1/datasource.properties
file:${HOME}/app2/datasource.properties
file:${HOME}/app3/datasource.properties
显然,如果应用程序部署为/funky_chicken,那么它将有一个匹配的funky_chicken/datasource.properties
有什么想法吗?我知道我可能已经很接近了,而且我已经尝试过倾倒所有的环境属性。 (你可能会告诉我从JNDI 得到它,因为它是我唯一没有放弃寻找上下文的)
现在我知道${HOME} 不是存储配置项的最佳位置,它实际上只是为了更容易描述问题。
更新:
感谢使用配置文件的建议,有没有办法在一个 tomcat 服务器中拥有三个活动配置文件,/app1、/app2 和 /app3 来自同一个 WAR 文件?
【问题讨论】:
-
看来我可以利用这个答案stackoverflow.com/questions/36353040/…
标签: spring spring-boot tomcat spring-properties