使用hibernate.cfg.xml时更改hibernate.properties文件的位置

时间:2014-07-30 16:08:39

标签: java spring hibernate

我们在hibernate.cfg.xml中提供db凭证为

<hibernate-configuration>
    <session-factory>
       <property name="hibernate.connection.url">url</property>
       <property name="hibernate.connection.username">username</property>
       <property name="hibernate.connection.password">password</property>
    <session-factory>
<hibernate-configuration>

我们可以在这里或在classpath中的hibernate.properties中提供这些属性。但我希望它们来自外部文件。我无法在休眠中找到一种方法来改变默认hibernate.properties文件的路径。

请帮忙。

[编辑] java中生成sessionFactory对象的方法

public class HibernateUtil {

  private static final SessionFactory sessionFactory = buildSessionFactory();

  private static SessionFactory buildSessionFactory() {
    // Create the session factory from hibernate.cfg.xml
    Configuration configuration = new Configuration();
    StandardServiceRegistryBuilder serviceRegistryBuilder =
        new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
    return configuration.buildSessionFactory(serviceRegistryBuilder.build());
  }

  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}

1 个答案:

答案 0 :(得分:3)

以编程方式,您可以加载XML和以下属性:

public class MyHibernate {

  private static final SessionFactory sessionFactory = buildSessionFactory();

  private static SessionFactory buildSessionFactory() {
    try {
        URL r1 = MyHibernate.class.getResource("/hibernate.cfg.xml");
        Configuration c = new Configuration().configure(r1);

        try {
            InputStream is = MyHibernate.class.getResourceAsStream("/hibernate.properties");
            Properties props = new Properties();
            props.load(is);
            c.addProperties(props);
        } catch (Exception e) {
            LOG.error("Error reading properties", e);
        }

        return c.buildSessionFactory();
    } catch (Throwable ex) {
        LOG.error("Error creating SessionFactory", ex);
        throw new ExceptionInInitializerError(ex);
    }
  }

  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}

通过春天

您可以使用PropertiesFactoryBean从文件中读取属性并配置LocalSessionFactoryBean:

<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
    <property name="hibernateProperties">
      <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="location">path-to-properties-file</property>
      </bean>
    </property>
    ...
  </bean>

希望它有用。