以编程方式在Hibernate中设置db url / user / password

时间:2010-07-02 17:56:26

标签: java hibernate jdbc

我需要将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>

现在我想将“connection.url”,“connection.username”和“connection.password”移动到我自己的.properties文件中。创建我的hibernate配置类的代码来自。

new AnnotationConfiguration().configure();

new AnnotationConfiguration()
                .setProperty("connection.url", databaseUrl)
                .setProperty("connection.username", databaseUser)
                .setProperty("connection.password", databasePassword)
                .configure();

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

  

用户必须提供JDBC连接

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

3 个答案:

答案 0 :(得分:4)

来自Hibernate参考文档:

  

3.3. JDBC connections

     

[...]

     

以下是一个例子   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放在类路径的根目录(并删除hibernate.cfg.xml中的等效条目,因为XML配置文件会覆盖属性)。因此实际上无需更改以下行:

new AnnotationConfiguration().configure();

除非你真的当然需要程序化配置。

但是从你问题的主体来看,转移到.properties文件是另一回事,你可以依赖Hibernate:将相关属性从hibernate.cfg.xml移到{{ 1}}。

答案 1 :(得分:3)

尝试设置以下属性

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.cconnection.username", "user");
properties.put("hibernate.connection.password", "password");
properties.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");

当然这适用于SQL Server,因此您需要将驱动程序更改为'org.gjt.mm.mysql.Driver“' 并改变方言以及'org.hibernate.dialect.MySQLInnoDBDialect'

答案 2 :(得分:0)

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