码迷,mamicode.com
首页 > 编程语言 > 详细

循环调用spring的dao,数个过后无响应

时间:2015-01-16 01:04:25      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:

    最近遇到这么一个问题:前台按钮发送AJax请求到后台,后台是SSH框架。每点击一下按钮就发送一次请求。 点击数次(7次)过后,页面无ajax响应。 在排除前台因素之后,找 
到后台代码。写一个Test类。 
public static void main(String[] args) { 

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); 
    TestDao testDao = (TestDao)context.getBean("testDaoImpl"); 
        for (int i = 0; i < 10; i++) { 
        TestDao testdao = (TestDao)context.getBean("testDaoImpl"); 
        List<Test> test = testdao.getTestsByVehicleType(1); 
        System.out.println(i); 
   } 
控制台输出到7也停止了。 
     网上也有个别帖子求助说"spring 调用bean次数的问题"。 
    其实罪魁祸首是在DAO注入sessionFactory后,在DAO方法里面sessionFactory.openSession() 。 
     虽然spring声明式的事务会自动帮你commit,但是openSession()产生的session并不会由于commit而自动关闭,而你多次打开新的session,结果session过多造成这个假死的现象。 
     我的解决办法是DAO方法里改为sessionFactory.getCurrentSession()。该方法产生的session会在commit的时候自动close()这点我们在hibernate的时候已经学过了;或者使用HibernateTemplate的方法。 
     不过在假如不是在B/S的情况下,即在Main测试getCurrentSession()是不成功的。 因为SessionFactory是注入进来的,getCurrentSession()不在事务范围之内。

循环调用spring的dao,数个过后无响应

标签:

原文地址:http://www.cnblogs.com/u0mo5/p/4227561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!