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

Java 如何使用持久性动态配置数据库连接,java,hibernate,jpa,jdbc,persistence,Java,Hibernate,Jpa,Jdbc,Persistence,我在persistence.xml中设置了数据库连接,包括服务器url和用户名/密码。然而,如果我想在开发环境(dev/qa/stg/prod)之间切换,有没有更好的方法来更改配置而不是手动修改persistence.xml 我使用jdbc连接和hibernate一起调用存储过程。jdbc连接更加灵活。它根据环境变量DEV_ENV连接到不同的数据库 // DEV DB if (env.equalsIgnoreCase("dev")) { connectionURL = "jdbc:ora

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

我使用jdbc连接和hibernate一起调用存储过程。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";
}
如何以相同的方式配置hibernate db连接,选择环境变量并动态决定连接到哪个db

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

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

  • 为每个环境添加url、用户和密码

  • 然后使用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中执行此操作的参考,您可以看看。

    为什么要手动修改persistence.xml?您可以有2个持久性单元“dev”和“prod”,并使用其中的任意一个创建EMFappropriate@NeilStockton没有想过使用单位。我会试试看。我应该在哪里以及如何创建EMF?现在在哪里以及如何创建EMF???@NeilStockton抱歉,这是一个愚蠢的问题。我认为应该行得通。谢谢