NutzCN Logo
精华 Dao事务在高并发下是怎样管理Connection的?
发布于 2720天前 作者 threefish 1915 次浏览 复制 上一个帖子 下一个帖子
标签: dao

1、Dao事务在高并发下是怎样管理Connection的?
使用jmeter创建5000线程访问以下程序,发现代码良好运行,想了解下底层连接管理的处理方式与想法。
比如Conn是否是排队使用?多个线程共用?等等
谢谢

@IocBean
@At("/user")
@Ok("json")
@Fail("http:500")
public class UserModule {

    @Inject
    protected Dao dao;

    @At
    @Aop(TransAop.READ_COMMITTED)
    public void login() throws  Exception{
        User user = new User();
        user.setName(Thread.currentThread().getName() + " >>> " + Thread.currentThread().getId());
        user.setPassword("123456");
        user.setCreateTime(new Date());
        user.setUpdateTime(new Date());
        dao.insert(user);


        User user2 = new User();
        user2.setId(1);
        user2.setName(Thread.currentThread().getName() + " === " + Thread.currentThread().getId());
        user2.setPassword("123456");
        user2.setCreateTime(new Date());
        user2.setUpdateTime(new Date());
        dao.insert(user2);
    }
}
9 回复

听说过数据库连接池吗?

@wendal 一直在连接池取连接会报Too many connections。
我的意思是在取得有限的连接情况下,Nutz在底层是如何管理取到的Connection,如果有5000用户并发,不可能全部都去getConnection()。
并且一个有效Connection在同一时间只能执行一个事务,100个链接也不能全部处理5000个带事务的请求。
所以想问下应该如何处理?

事实上就是这样, 一个线程独占一个Connection.

不存在一个Connection在一个时间点被多个线程开启多个事务.

@wendal
那在并发情况下,就存在用户等待获取有效连接了?
获取到链接后再执行业务,对吧?

@wendal 那在并发情况下,就存在用户等待获取有效连接了?
获取到链接后再执行业务,对吧?

@qq_a0db4426 是的, 只能等, 例如druid的maxWait参数,设置最多等多久

ThreadLocal<Connection>
添加回复
请先登陆
回到顶部