java - 启动服务器时如何从 persistence.xml 更改 url 属性
问题描述
我有一个应用程序 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
实例时都在此处创建它。
您可以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();
}
推荐阅读
- linux - 对终端中找到的文件执行命令?
- r - 当两个变量与第二个 DF 匹配时,将列添加到 DF
- python - 如何查看或“分类”当前正在更新的文件并能够看到写入其中的新信息?
- c - 忽略 -Wunused-variable 的未使用变量
- java - 如何通过使用@Cacheable 注解实现以下行为?
- excel - 使用 VBA 将文本从 Excel 导出到 PowerPoint
- r - 使用 for loop R 创建多个 ggplots 的问题
- node.js - 如何在不超过免费部署层级的情况下部署 Node.js 代码以按时间间隔运行
- java - 转换为三元运算符时条件改变行为?
- javascript - Typescript JSDoc ...Rest 类型语法