spring、mybatis整合多线程问题 5C

1.在已有的spring+mybatis项目中增加了多线程访问数据库的业务,主要是查询,添加,写入到其它数据源。
2.部分需要支持多线程的service类已增加@scope("prototype"),从debug可以看到service获取到的已是不同的对象(service是线程类,获取方式通过spring上下文获取)。
3.service中注解的mapper是单例的,运行过程中经常报连接已关闭。开始的想法是在mapper接口上也加入@scope("repository")注解,结果加上后,程序启动报错。
4.现在我是直接用原始jdbc来处理可以很好的解决多线程的问题,想请教下大家在原有的框架中怎么处理才能支持多线程。



#2018年4月8日,更新
问题已解决,在service类中注解SqlSessionFactory对象,通过openSession方法可以获取到一个SqlSession对象,然后getMapper出来的对象就是线程安全的。

3个回答

多线程并发可以考虑用并发锁解决你说的问题。单服务情况下直接内存是用synchronized。分布式服务的话可能需要引入redis缓存数据库来加锁。希望能解决你的问题。

多线程并发可以考虑用并发锁,分段锁解决你说的问题。
单服务情况下直接内存是用synchronized。手动使用lock锁比较适合,分布式服务的话可能需要引入redis缓存数据库来加锁。希望能解决你的问题。

使用数据库连接池,常用数据库连接池 (DBCP、c3p0、Druid)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!