我们有一个数据库库,可以从属性文件中获取连接信息(用户、主机等)。此文件可以是位于类路径中的 config.properties
文件,或者位于执行 jar 旁边,或者可以作为参数传递 -Dproperties=/path/to/myConfig.properties
.
我们还有几个应用程序使用这个库,所以每个应用程序都有自己的 config.properties 文件用于自己的执行。
但现在我正在创建两个使用相同库的 Web 应用程序。因此,如果我将它们部署在 Tomcat(war 文件)中,我有两个选择(据我所知):
1.- 在 WAR 文件中包含每个配置。但是有了这个,每次我需要在 config.properties
中调整一些东西时,我都必须重新打包 war。
2.- 传递 -Dproperties
参数作为 Tomcat 的执行参数。但是不同的 war 部署必须共享相同的属性文件。
有解决办法吗?
我可以将 -D
参数传递给 Tomcat(或任何其他服务器)中的特定部署吗?
PS:这是我们的场景之一,但不限制数据库连接信息。我们还有其他库通过 config.properties
文件获取参数。
编辑:我希望能够为每个部署拥有不同的config.properties
文件。它们之间共享的属性不同。
我想我找到了一种在应用程序内部使用自包含网络服务器的方法,例如 Jetty。
最佳答案
我们有一个类似的要求,我们在部署到 JBoss EAP 服务器的不同应用程序之间共享一个公共(public)属性文件。
在$JBOSS_HOME/bin/standalone.conf 文件中可以添加如下配置文件路径:
JAVA_OPTS="$JAVA_OPTS -DCONFIG_LOCATION=/external/config/configuration.properties"
使用上面指定的属性启动服务器,在您的应用程序中,您可以使用 apache commons-configuration api 读取此属性文件,如下所示:
try {
props = new PropertiesConfiguration(System.getProperty("CONFIG_LOCATION"));
FileChangedReloadingStrategy strategy = new FileChangedReloadingStrategy();
// Delay 30s
// strategy.setRefreshDelay(30000);
props.setReloadingStrategy(strategy);
} catch (ConfigurationException e) {
e.printStackTrace();
}
使用此重新加载策略,您可以在服务器运行时更改属性。您还可以指定一个时间间隔,在该时间间隔之后,外部文件中指定的所有属性都需要在您的应用程序中刷新而不弹出它。希望这对您有所帮助!
关于java - 同一台服务器上的不同属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48646871/