spring 多线程事务

spring 的bean默认是单实例,但是要保证多线程来访问,底层技术采用的是threadlocal来处理生成当前线程的一个bean.同理与事务相关的bean==jdbctemplate也是一样的。这样的话,问题就来了。
比如你在一个service方法,调用多个dao,或是service,这些都可以在同一个事务当中。
但是如果你开始多线程,在每个线程做数据库操作.每个线程的事务就是独立的。哪怕是你传入每个线程的都是同一个jdbctemplate或是dao,也会是事务独立。因为只要开启一个新线程,那么这个事务bean在新的事务当中,一定是通过threadlocal产生了一个副本来操作。所以通过threadlocal产生的bean与传入的bean不在同一个事务当中。

猜你喜欢

转载自ysa198584.iteye.com/blog/2212598
今日推荐