我在javafx应用程序上工作了几年,目前使用的是一个应用程序管理的jpa entitymanager Hibernate 5.4.19.Final
作为jpa的实现, MySQL 8
或者 MS SQL Server 2008
作为数据库和 HikariCP 3.2.0
作为数据库连接池。它继续运行 JDK 11.0.8+10
来自OpenJDK。未实现二级缓存,因为同一数据库上有多个应用程序示例在运行,以保持所有应用程序上的数据一致(这可能会在将来很长一段时间内更改为客户机-服务器体系结构)。
该应用程序是多线程的,在executor服务中运行javafx任务和javafx服务,默认情况下,executor服务限制为15个线程。任务和服务都使用jpa访问底层数据库。
数据库访问是通过一个实现crud函数的非常基本的dao来处理的。dao是在dao工厂上建造的,dao工厂正在开放 EntityManagerFactory
. 对于每个线程,都会构造一个新的dao,dao工厂以一个特定的方式跟踪dao ConcurrentHashMap<Thread, DAO> DAOS
. dao工厂在打开一个新dao之前检查线程是否死机。如果是这种情况,dao工厂将通知dao关闭entitymanager(如果有)并从dao工厂的Map中删除 DAOS
.
论道安的每一次积垢作业 EntityManager
在操作完成后构造并关闭。dao上的一个常见操作是将数据加载到javafx表视图,如 Task<MyEntityWrapper>
通过onsucceeded处理程序将数据提供给tableview。任务由executor服务运行。 MyEntityWrapper
正在 Package 一个 MyEntity
道中的对象。
在某些情况下,实体也会将任务返回给onsucceeded处理程序。
我注意到,这种方法可以很好地处理两个或多个实体之间没有关联的简单实体,但是当使用 LazyInitializationException
. 我必须用 FetchType.EAGER
这似乎降低了性能。
我禁用了自动提交功能 HikariCP
,设置批大小,设置为顺序插入和更新,并在不需要写入访问权限的查询中设置只读提示 Hibernate
以提高性能。
有没有办法在这个应用程序上启用延迟加载?
是否有任何hibernate配置调整或最佳实践,我错过了提高性能?
暂无答案!
目前还没有任何答案,快来回答吧!