【发布时间】:2018-02-06 15:49:37
【问题描述】:
我们有一个从属性文件中获取连接信息(用户、主机等)的数据库库。该文件可以是位于类路径中的config.properties 文件,也可以是执行jar 旁边的文件,也可以作为参数-Dproperties=/path/to/myConfig.properties 传递。
我们还有几个使用这个库的应用程序,所以每个应用程序都有自己的 config.properties 文件用于自己的执行。
但现在我正在创建两个使用相同库的 Web 应用程序。因此,如果我将它们部署在 Tomcat(war 文件)中,我有两个选择(据我所知):
1.- 在 WAR 文件中包含每个配置。但是有了这个,每次我需要在config.properties 中调整一些东西时,我都必须重新打包战争。
2.- 传递-Dproperties 参数作为Tomcat 的执行参数。但是不同的战争部署必须共享相同的属性文件。
有没有办法解决这个问题?
我可以将 -D 参数传递给 Tomcat(或任何其他服务器)中的特定部署吗?
PS:这是我们拥有的场景之一,但不受数据库连接信息的限制。我们还有其他通过config.properties 文件获取参数的库。
编辑:我希望能够为每个部署提供不同的config.properties 文件。它们之间共享的属性不同。
我想我找到了一种在应用程序中使用自包含网络服务器的方法,例如 Jetty。
【问题讨论】:
-
你能修改加载属性的共享库吗?如果是,添加对可选属性前缀的支持。例如,war 1 使用前缀“app1”,war 2 使用前缀“app2”。在共享属性文件中:
app1.database.url=...和app2.database.url=...。 -
是的,我可以修改库。问题是,该库并非特定于 Web 应用程序(其他 java 项目可能会使用它),并且 Web 应用程序的数量可能会增加,所以如果我理解您的方法,它将为“消费者”Web 应用程序量身定制。 @AndrewS
-
是的 - 共享库的使用者需要一种方法来设置前缀或注入带有前缀的实例。