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