如何使用持久性动态配置数据库连接

how to configure database connection on the fly with persistence

我在 persistence.xml 中设置了数据库连接,包括服务器 url 和 username/password。但是,如果我想在开发环境(dev/qa/stg/prod)之间切换,有没有更好的方法来更改配置而不是手动修改persistence.xml?

我正在使用 jdbc 连接来调用存储过程以及休眠功能。 jdbc连接更灵活。它根据环境变量 DEV_ENV 连接到不同的数据库。

// DEV DB
if (env.equalsIgnoreCase("dev")) {
    connectionURL = "jdbc:oracle:thin:@ldap://mdaoid.mdanderson.org:389/risdev3, cn=OracleContext,dc=mdacc,dc=tmc,dc=edu";
    user = "ristore_owner";
    pass = "ristoreowner987";
}
// QA DB
else if (env.equalsIgnoreCase("qa")) {
    connectionURL = "jdbc:oracle:thin:@ldap://mdaoid.mdanderson.org:389/risdev3, cn=OracleContext,dc=mdacc,dc=tmc,dc=edu";
    user = "ristore_owner_qa";
    pass = "ristore987q";
}

我如何以相同的方式配置休眠数据库连接、获取环境变量并决定动态连接到哪个数据库?

编辑:人们向我展示了如何使用 war 从 tomcat 服务器获取数据库信息。但是,我的是 java 应用程序 (jar),我没有部署它。我将其设置为每周 运行 jar 的 cron 作业。

  1. 创建两个 xml 配置文件。 persistenceDev.xml 和 persistenceQA.xml

  2. 为每个环境添加 url、用户和密码。

  3. 然后使用SessionFactory创建会话

注意:您唯一更改的是配置文件名。 我要提供的是命令行参数或静态最终变量。 比如说,假设 0 = dev,1 = qa。

String configFileName = (args[0] == 0) ? persistenceDev.xml: persistenceQA.xml;

你获取配置文件后的代码不会改变。

我看到你以某种方式提供了环境。我的建议是使用构建工具(如 Maven、Gradle 等),通过它你可以将实际环境作为参数,如 UAT、Dev、Prod。

然后你可以有多个配置文件,如application-dev.xml、application-uat.xml。在构建期间,您使用构建工具加载适当的配置文件。

作为在 Maven 中执行此操作的参考,您可以查看 here