Java 在Hibernate中以编程方式设置db url/用户/密码

Java 在Hibernate中以编程方式设置db url/用户/密码,java,hibernate,jdbc,Java,Hibernate,Jdbc,我需要将Java web应用程序的所有设置集中在一个.properties文件中。我仍然可以使用hibernate.cfg.xml向实体类添加映射,但我需要将数据库和自定义路径的所有设置保留在一个.properties文件中 最初,我将配置保存在hibernate.cfg.xml中,如下所示 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi

我需要将Java web应用程序的所有设置集中在一个.properties文件中。我仍然可以使用hibernate.cfg.xml向实体类添加映射,但我需要将数据库和自定义路径的所有设置保留在一个.properties文件中

最初,我将配置保存在hibernate.cfg.xml中,如下所示

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">my jdbc connection</property>
        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="connection.username">user</property>
        <property name="connection.password">password</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="hibernate.current_session_context_class">managed</property>
        <mapping class="myEntityClass"/>
    </session-factory>
</hibernate-configuration>

这在概念上似乎很简单。不幸的是,当我尝试使用与先前配置一起工作的Hibernate会话时,我遇到了以下错误

用户必须提供JDBC连接


有什么想法吗?在我看来,当Hibernate看到Hibernate.cfg.xml文件中缺少这些属性时,它假定所有设置都将手动添加,并完全忽略xml。

尝试设置以下属性

properties.put("hibernate.connection.driver_class", "net.sourceforge.jtds.jdbc.Driver");
properties.put("hibernate.connection.url", "jdbc:jtds:sqlserver://test/dbname;SSL=REQUEST");
properties.put("hibernate.connection.username", "user");
properties.put("hibernate.connection.password", "password");
properties.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
        
当然,这是针对SQL Server的,所以您需要将驱动程序更改为“org.gjt.mm.mysql.driver”
并更改hibernate参考文档中的方言“org.hibernate.dialen.mysqlinnodbdialent”

[……]

下面是一个例子 c3p0的
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
调整它以满足您的需要,并
hibernate.properties
放在类路径的根目录中(并在xml配置文件覆盖属性时从
hibernate.cfg.xml
中删除等效项)。因此,实际上无需更改以下行:

new AnnotationConfiguration().configure();
当然,除非你真的想要一个编程配置


但是从问题的主体来看,移动到
.properties
文件是另一回事,您可以依赖Hibernate:将相关属性从
Hibernate.cfg.xml
移动到
Hibernate.properties

为什么“connection.url”“是否在hibernate.cfg.xml文件中工作?是否假定您指的是hibernate.connection.url?这很有趣。@Benju:正如您在
org.hibernate.cfg.Environment
中看到的,属性的前缀是
hibernate.
。也许Hibernate开发人员正在对XML配置施展魔法,我没有检查源代码。无论如何,文档非常清楚。@Benju我认为XML中指定的属性可以使用或不使用
hibernate.
前缀。请参阅方法。虽然此代码可以回答此问题,但提供有关此代码为什么和/或如何回答此问题的其他上下文可提高其长期价值。
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.initialize=true
spring.flyway.baseline-on-migrate=true
flyway.baseline-on-migrate: true
spring.flyway.baselineVersionAsString=2
spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto = update
spring.jpa.show-sql=true
new AnnotationConfiguration().configure();
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.initialize=true
spring.flyway.baseline-on-migrate=true
flyway.baseline-on-migrate: true
spring.flyway.baselineVersionAsString=2
spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto = update
spring.jpa.show-sql=true