工作中遇到这样一个问题,定时任务执行时总是报no session问题,根据no session 百度,原因是当前线程没有session,spring+hibernate框架,hibernate和spring会为每一个线程绑定一个session,解决方法大致有两个:
(1)hibernate关闭延迟加载 http://blog.csdn.net/luckyzhoustar/article/details/47829947
(2)在spring配置文件中配置 OpenSessionInViewFilter
http://blog.csdn.net/kiss_fly/article/details/50509504
但是项目中都配置了,还是报no session 问题,最后找出原因:
数据库是读写分离,service 和dao是单例,service 在查询出来一个对象以后,再对这个对象进行更改,写入数据库,需要的是写的操作,当前session还没有关闭,那么,这个时候,再去写入数据库,并没有权限,就会报错误,但是报的错误体现出来的就是no session的错误,而不是sql语句错误。
方法:将service中的查询操作和更新操作分开写在quarz的操作方法中,而不是写一个service完成查询和更新操作。
参考:
http://blog.csdn.net/lonelyroamer/article/details/7949969
http://blog.csdn.net/hongshan50/article/details/7100667
http://blog.csdn.net/jiangjiajian2008/article/details/51714979