Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠会话工厂重启| Spring_Java_Spring_Hibernate_Sessionfactory - Fatal编程技术网

Java 休眠会话工厂重启| Spring

Java 休眠会话工厂重启| Spring,java,spring,hibernate,sessionfactory,Java,Spring,Hibernate,Sessionfactory,我的要求如下: 我需要在SpringWeb应用程序中频繁地使用从外部获得的新HBM文件重新启动(或重建)hibernate会话工厂 目前,我的Sessionfactory类如下所示,带有一个Sessionfactory代理来拦截“OpenSession”调用 在这里,我正在检查重新启动和重建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);