最近遇到这么一个问题:前台按钮发送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被循环调用的时候数据不实时更新的解决方法,需要的朋友可以参考下
spring集成hibernate通用dao,泛型,server都可以调用
普通javaweb项目调用springCloud接口(超级实用,很详细)但是要注意的事一定要对springboot和springcloud的有所了解,不然的话你也是看不懂的,大家一起努力共同学习
iOS-常驻线程之线程循环调用(两个线程循环交替调用) 详细介绍: https://blog.csdn.net/u014220518/article/details/80536995
假定两个Controller都在同一个工程中。 如果有比较合理的分层设计,这样的需求应该是非常罕见的。因为大部分情况下,调用应该都是限于对业务逻辑层或者数据库层,并不会涉及Controller之间的调用。 本文是讨论...
struts2.3.4+spring3.2.0+hibernate4+hibernate_generic_dao struts hibernate spring最大化使用注释 基于spring的远程调用
spring3.2后端 一个dao练习,木有mvc,就只有一个通用的dao,管理若干个mapper文件,service 传入 mapperName.cmdName 参数 ,通过通用dao,调用指定namespace的mapper
在SSH整合开发中,利用Spring管理Service、DAO等组件,利用IoC机制实现Action和Service,Service和DAO之间低耦合调用。利用AoP机制实现事务管理、以及共通功能的切入等。 功能是整合,好处是解耦。
实现Springcloud向dubbo项目的接口调用。 FeignToDubbo-starter模块负责利用Feign将底层的Http协议转化为dubbo协议,供SpringCloud项目使用。引入FeignToDubbo-starter后会引入dubbo的依赖,使用注解DubboRefence...
jsp中调用dao的getHibernateTemplate()时,报空指针
spirng远程调用可运行简单实例。包含所需所有jar spring-*-3.*.RELEASE.jar aopalliance.jar等。
spring与java反射结合动态定义类及调用函数,实现类的动态定义和函数的动态调用。 为有动态调用的web应用提供一点点借鉴,相互学习。
适合有spring框架的javaEE平台,出自spring的HttpInvokerServiceExporter导出器,依赖Spring.jar
springcloud结合中间件调用python服务,实现python数据模型被springcloud中的java服务调用
Spring远程调用使用http方式,将server和client直接部署后,进入http://localhost/HttpClientSpringRMIClient/即可
Spring事务管理A方法内部调用B方法的回滚问题测试代码
使用 spring 的 httpinvoker 进行远程调用
JSP 开发之servlet中调用注入spring管理的dao 我们用spring的依赖注入可以将dao注入到action中,然后我们就可以直接调用了dao中的方法了,可是servlet不是由spring容器管理,所以在servlet中不能注入dao类,也就不能...
Spring集成Cxf调用WebServices