当tomcat遇到多ajax同时调用

不知道算不算很常见的业界做法,这次有个项目是在页面载入完成后会首先去后台获取几个值,大约两三个ajax同时走,数据源是sqlserver,在另一台服务器上。

然后就刷新页面时不时的报连接已关闭,语句已关闭,空指针之类的问题

(spring)controller类大概是这样写的:

public class Controller{
	private BaseDao dao=new BaseDao();
...
}

一开始是觉得每个请求进去都会单实例化一个新的controller,所以这么写,当一个请求有多次与数据库交换数据的时候就可以减少connection的close次数。

但是遇到问题以后就试了试在dao里多次访问的方法里添加:

	int i=0;
	{
		//测试tomcat同一个人每个请求是否只装载一个实例
		System.out.println(i++);
	}

结果就是1,2,3,,一段时间后刷新。456,所以其实对同一个ip来源,在握手成功后,,调用某一个action,tomcat其实只会实例化一个controller来专门负责此人的接待,此时dao是公用的,

所以一旦某个连接执行完成执行destory就把其他的操作也关闭了。

修改成在每个操作内部

BaseDao dao=new BaseDao();
就好了。缺点是内存占用高,想了下,改成只对会同时调用的方法用这个模式,其他还是原来的全局new ,内存占用就比较合理了。

当然也可以用连接池一类的方法来维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值