【问题标题】:How to alter url property from persistence.xml when starts the server启动服务器时如何从 persistence.xml 更改 url 属性
【发布时间】:2018-12-28 20:29:11
【问题描述】:

我有一个应用程序 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 文件。

【问题讨论】:

    标签: java hibernate jersey


    【解决方案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();
        }
    }  
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      相关资源
      最近更新 更多