首页 > 代码库 > 循环调用spring的dao,数个过后无响应
循环调用spring的dao,数个过后无响应
循环调用spring的dao,数个过后无响应
博客分类:- spring
daospringssh
最近遇到这么一个问题:前台按钮发送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()不在事务范围之内。
到后台代码。写一个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,数个过后无响应
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。