This is my Blog!!Welcome to you!!
【分享个人java学习心得和技术问题汇总】

使用Spring AOP对service层进行日志记录 No session found for current thread

 

如题,使用Spring AOP对service层进行日志记录,在日志记录类中调用dao层方法操作数据库,但是调用时一直报No Session found for current thread异常,配置文件如下,看起来好像是没有对LogService进行实物管理,导致没有注入SessionFactory,有没有人遇到过类似的情况,求指导。

 

正常调用的事务管理是成功的,只是在原有的基础上添加aop日志记录。也只有logService调用的时候会报这个异常,另外我发现如果在logService中调用其他dao层,即使logService中的方法还没被触发,被调用的dao层都会报No Session found for current thread异常,这中间是不是涉及到类似于初始化顺序什么的原因。

 

开始进行日志改造的时候给自己留了一个后备方案,就是在logService中自己进行jdbc连接,不使用框架的数据库操作。笨办法。
一直在找资料解决这个问题:通过action调用service,service调用dao可以成功,但是在配置文件中直接调用Service就会报No session found for current thread错误,这次是在<aop:aspect> 标签中ref的aspectBean,以前研究SpringSecurity时也碰到过这种情况,通过断点跟踪调试,bean依赖的dao确实注入了,dao层也有了SessionFactory对象,但是当前线程没有绑定Session。有点怀疑是不是配置文件引用bean和添加事务处理两者执行顺序的原因,但毕竟对细节不了解,只是揣测。

 

决绝办法

 

改为

 

问题是使用openSession()打开新的Session需要自己手动关闭~而在哪里调用会打开新的Session就只有自己知道了。就这样结贴了,以后找到真正原因了再看。

http://bbs.csdn.net/topics/391039812

未经允许不得转载:Java学习 » 使用Spring AOP对service层进行日志记录 No session found for current thread

分享到:更多 ()