Java 休眠会话工厂重启| Spring
我的要求如下: 我需要在SpringWeb应用程序中频繁地使用从外部获得的新HBM文件重新启动(或重建)hibernate会话工厂 目前,我的Sessionfactory类如下所示,带有一个Sessionfactory代理来拦截“OpenSession”调用 在这里,我正在检查重新启动和重建sessionFactory的条件 我这里的问题是,在并发环境中,处于其他事务中间的其他用户在重新启动过程中受到影响 是否需要通过检查所有事务和打开的会话来执行重新启动,并在所有其他事务完成后重新构建会话工厂 或者存在任何其他解决方案 代码: 谢谢,Java 休眠会话工厂重启| Spring,java,spring,hibernate,sessionfactory,Java,Spring,Hibernate,Sessionfactory,我的要求如下: 我需要在SpringWeb应用程序中频繁地使用从外部获得的新HBM文件重新启动(或重建)hibernate会话工厂 目前,我的Sessionfactory类如下所示,带有一个Sessionfactory代理来拦截“OpenSession”调用 在这里,我正在检查重新启动和重建sessionFactory的条件 我这里的问题是,在并发环境中,处于其他事务中间的其他用户在重新启动过程中受到影响 是否需要通过检查所有事务和打开的会话来执行重新启动,并在所有其他事务完成后重新构建会话工厂
Appasamy您可以按照SessionFactoryUtils确定事务是否在会话工厂中发生,然后决定是否重新启动会话工厂: 您需要在文件中导入-->org.springframework.orm.hibernate.SessionFactoryUtils,并使用以下API
static boolean hasTransactionalSession(SessionFactory sessionFactory);
上面的API返回当前线程是否存在事务性Hibernate会话,即Spring的事务设施绑定到当前线程的会话。如果您需要检查会话工厂中的会话当前是否为事务性会话,还存在另一个API:
static boolean isSessionTransactional(Session session,SessionFactory sessionFactory);
上面的API返回给定的特定Hibernate会话是否是事务性的,也就是说,通过Spring的事务处理工具绑定到当前线程。为什么不在办公时间之外重建会话工厂呢?哎哟,这是应用程序上必须具备的一些糟糕的设计/体系结构。在运行时更改hibernate/数据库配置不是很好。。。
static boolean isSessionTransactional(Session session,SessionFactory sessionFactory);