在ssh框架中经常会用到多线程,线程中需要调用Service层进行业务处理,而为了提升性能我们都会选择使用Hibernate 的延迟加载模式。当在线程中的调用持久化的某个实体对象的延迟加载加载属性时就会抛出Hibernate的延迟加载异常,主要原因是之前的session已经关闭了。于是乎,我就想到了Spring中的定时器,定时器也可以理解为线程,我们在定时器注入一个执行具体任务实例。该实例可以视为Services,在这个Services里我们还可以注入其他的Services。这样我的问题有了解决办法。
现有
线程 Thread_X 该线程交给Spring管理
ServiceA 该Service只有 一个 work 方法,同样交给Spring管理
在ServiceA的work方法中处理全部业务逻辑。
简单的说,就是在线程中注入一个类似代理的Services,具体的业务逻辑都交给代理去做,然后把事务交给Spring来控制,事务配到Service层,这样线程中就只调用了代理,具体的业务逻辑都在代理那实现的,而且事务又都配置Service层,这样就不会出现由于session关闭引起Hibernate延迟加载的问题。
小弟不才,这种解决方案不知道算不算最笨的,如果您有更为优雅高效的方案,望告知!