【发布时间】:2015-11-11 15:09:50
【问题描述】:
我有一个使用 Java、REST、Jersey 并在 Tomcat8 上运行的网络服务。 Web 服务需要访问数据库。根据我们在流程中所处的位置,我们可能正在使用测试数据库、生产数据库或其他东西。理想情况下,我们希望能够设置使用哪个数据库,而无需更改代码和重新编译。
我们尝试过的方法是使用属性文件定义数据库参数并使用环境变量指向该文件。事实证明这很麻烦,首先我们很难在 Tomcat 服务器上定义我们可以从应用程序中读取的系统属性,而且似乎所有文件都必须在类路径中定义,即已经提前配置和代码库的一部分。
这似乎是相当普遍的情况,所以我确定有推荐的方法来处理这种情况?
【问题讨论】:
-
根据您的帖子,听起来您有 1 个 Web 服务正在与测试、产品或其他数据库进行交互。为什么不在适当的环境(开发、测试、产品)中提供 Web 服务?让 1 个 Web 服务访问多个环境 IMO 真的很危险……可能会错误地更新产品……开发 Web 服务应该访问开发数据库、测试 Web 服务测试数据库等……
-
我会将属性存储在应用程序中,并根据环境有一些Maven profiles。根据配置文件,您在应用程序中打包适当的属性文件。要阅读属性文件,您可以查看Apache DeltaSpike Configuration Mechanism。看看这个answer。
-
如果上面提到的方法不能满足您的需求,请将属性文件外部化并使用 JNDI 来引用该文件。看看这个answer。
标签: java web-services rest tomcat jersey