启动服务器时如何从persistence.xml更改url属性

时间:2018-07-20 13:48:49

标签: java hibernate jersey

我有一个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文件。

1 个答案:

答案 0 :(得分:1)

您必须一次创建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();
    }
}  

然后使用EntityManagerFactory中的缓存getEntityManager()

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