gpt4 book ai didi

java - 启动服务器时如何更改 persistence.xml 中的 url 属性

转载 作者:行者123 更新时间:2023-11-30 06:05:22 25 4
gpt4 key购买 nike

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

最佳答案

您必须创建一次EntityManagerFactory并将其缓存。
在这里,您每次创建 EntityManager 实例时都会创建它。

您可以在监听器或钩子(Hook)方法中创建 EntityManagerFactory,该监听器或钩子(Hook)方法会在应用程序启动并完全初始化时调用:

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();
}

关于java - 启动服务器时如何更改 persistence.xml 中的 url 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51444028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com