java - Spring @Transaction注解的方法在多线程中是否属于同一个事务
巴扎黑
巴扎黑 2017-04-18 10:32:49
0
2
493

在我的Java WEb中,我使用了spring MVC的事务,
我在service层中有个方法是用了@Transaction注解的,这个方法会update数据库中的数据,然后又查询数据库中的数据。
情况是这样,当有多个请求时,生成多个线程进入这个方法,然后我发现,在同一个方法里,update之后再查看这个数据,是可以看到数据确实被改变了的,但是这个改变在其他线程中是看不到的。
我的问题是,同一个方法即使多个请求进来不应该是进入同一个事务吗?这些线程之间做的数据更新不应该是彼此可见的吗?如果我想让同一个方法注册的事务都属于同一个事务应该怎么做呢?

巴扎黑
巴扎黑

reply all(2)
Ty80

It’s definitely not the same thing.
Spring uses ThreadLocal to store Connection. Different threads' Connection must be different, so they cannot be in the same transaction. ThreadLocal来存储Connection的,不同的线程Connection肯定不一样,所以不可能会在同一个事务中。
org.springframework.jdbc.datasource.DataSourceUtilsorg.springframework.jdbc.datasource.DataSourceUtils

巴扎黑

JavaBean implements underlying multi-threading...

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template