`

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

阅读更多
    最近遇到这么一个问题:前台按钮发送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()不在事务范围之内。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics