首页 > 解决方案 > 启动服务器时如何从 persistence.xml 更改 url 属性

问题描述

我有一个应用程序 Java + Jersey + Hibernate。也有一个 .ini 文件,我想在启动服务器时获取这个对数据库的访问 url。我尝试了一个选项,但它使persistence.xml 改变了每一个申请,并使所有申请变得非常缓慢。缓慢的解决方案是:

public static EntityManager getEntityManager() {
  String url = "jdbc:firebirdsql:xxx.xxx.xx.xxx/3040:c:\\database\\database.FDB";


EntityManager em = null;
Map properties = new HashMap();
properties.put("hibernate.connection.url", url);

try {
    emf = Persistence.createEntityManagerFactory("aplication", properties);
} catch (Exception e) {
    e.printStackTrace();
}

return em = (EntityManager) emf.createEntityManager();

}

是否有另一种方法可以将persistence.xml url 一次性更改为数据库?我需要一个执行者解决方案,不想要非常慢的解决方案。

注意:我需要这个的动机是因为我在 phyton 中有一个配置应用程序,它会为每个新客户更改 ini 文件。我的 Java 应用程序读取了这个 ini 文件。

标签: javahibernatejersey

解决方案


您必须创建EntityManagerFactory一次并缓存它。
每次创建EntityManager实例时都在此处创建它。

您可以EntityManagerFactory在应用程序启动和完全初始化时调用的侦听器或挂钩方法中创建:

private static EntityManagerFactory emf; // share emf

public void init() {       
    String url = "jdbc:firebirdsql:xxx.xxx.xx.xxx/3040:c:\\database\\database.FDB";                       
    Map properties = new HashMap();
    properties.put("hibernate.connection.url", url);

    try {
        emf = Persistence.createEntityManagerFactory("aplication", properties);
    } catch (Exception e) {
        e.printStackTrace();
    }
}  

然后使用缓存EntityManagerFactorygetEntityManager()

public static EntityManager getEntityManager() {       
   return (EntityManager) emf.createEntityManager();
}

推荐阅读