我有一个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文件。
答案 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();
}