我们有 2 个不同的服务器环境,使用相同的 Hibernate 配置。一台服务器具有对数据源的 JNDI 支持,但另一台服务器不支持。当前 Hibernate 配置被配置为使用 JNDI,这会在不支持 JNDI 的服务器上导致问题。
我还尝试将直接 JDBC 配置与 JNDI 配置一起放入配置文件中,但看起来 Hibernate 总是倾向于 JNDI 而不是直接 JDBC 配置(如果两者都存在)。
我的问题是,如果JNDI和connection_provider配置同时存在,会一样吗? Hibernate 仍然会通过 connection_provider 使用 JNDI 吗?或者有什么办法可以改变数据库连接属性的优先级?
我无法一直访问服务器,所以我想我确实在服务器时间窗口之前提出了这个问题。
提前致谢。
最佳答案
We have 2 different server environments using the same Hibernate configuration.
嗯,这可能不是预期的答案,但我感觉您自己在这里制造了问题:如果您的环境不同,请使用不同的配置。 我会做如下:
- 将所有常见内容放入
hibernate.cfg.xml
中(捆绑在应用程序中) - 将特定内容放入
hibernate.properties
文件中,并将“正确的内容”放入每个应用程序的类路径的根目录中(但在应用程序外部)。
例如,这将是“JNDI 环境”的 hibernate.properties
的内容:
hibernate.connection.datasource = java:/comp/env/jdbc/test
hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
这将是“非 JNDI 环境”的 hibernate.properties
的内容:
hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
关于java - Hibernate数据库连接配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2421616/