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

标签 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 文件。

最佳答案

您必须创建一次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/

相关文章:

java - Mockito:以复杂对象作为参数的 stub 方法

java - 试用资源详细信息

java - 将具有多对多关系的实体与集合的任何元素相匹配

java - 如何定义 @transactional 身份管理器?

java - 这种依赖给了我一个 jar 的两个版本。我该如何解决?

java - 最新的 Jersey 示例不起作用

java - 使用 arraylist 比较两个字符串数组

java - spring boot 无法连接到 mySql

mysql - 使用 Mysql/Oracle 的 JPA - EntityManager 没有持久性提供程序

Java Atmosphere Jersey 从 Broadcastable 返回 JSON 对象