Spring 单例 @Transactional 并发访问
Spring singleton @Transactional concurrent accesses
在 Spring 3 MVC web 应用程序场景中 @Controller
,@Service, @Repository
如果我用 [=14= 注释 @Service
classes ] 并且将bean的作用域保留为Singleton,事务管理器是否会在并发访问的情况下阻塞服务方法?
在单例的情况下,因为在任何时间点应用程序上下文中都会有一个服务实例 class,不同线程的后续请求已在执行相同的服务方法事务内部需要等到服务方法完成处理,如果是这样请告诉我。
我刚刚开始研究 Java EE 6,@Stateless EJB 用于服务 classes,并将其与 Spring 中的完成方式进行比较。
@Transactional 指定方法代码在事务中执行。
有不同的事务隔离级别根据底层数据存储指定方法的行为(@Transactional 注释的隔离 属性)。
此隔离级别是指底层数据存储,而不是方法。
最激进的隔离级别是可序列化的:
一个常量,表示防止脏读、不可重复读和幻读。这个级别包含了ISOLATION_REPEATABLE_READ中的禁止,进一步禁止了一个事务读取所有满足WHERE条件的行,第二个事务插入满足那个WHERE条件的行,第一个事务重新读取相同条件的情况,在第二次读取中检索附加的 "phantom" 行。 (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Isolation.html#SERIALIZABLE)
如果您想限制对该方法的访问,也许您应该简单地使用同步关键字。
在 Spring 3 MVC web 应用程序场景中 @Controller
,@Service, @Repository
如果我用 [=14= 注释 @Service
classes ] 并且将bean的作用域保留为Singleton,事务管理器是否会在并发访问的情况下阻塞服务方法?
在单例的情况下,因为在任何时间点应用程序上下文中都会有一个服务实例 class,不同线程的后续请求已在执行相同的服务方法事务内部需要等到服务方法完成处理,如果是这样请告诉我。
我刚刚开始研究 Java EE 6,@Stateless EJB 用于服务 classes,并将其与 Spring 中的完成方式进行比较。
@Transactional 指定方法代码在事务中执行。 有不同的事务隔离级别根据底层数据存储指定方法的行为(@Transactional 注释的隔离 属性)。
此隔离级别是指底层数据存储,而不是方法。
最激进的隔离级别是可序列化的: 一个常量,表示防止脏读、不可重复读和幻读。这个级别包含了ISOLATION_REPEATABLE_READ中的禁止,进一步禁止了一个事务读取所有满足WHERE条件的行,第二个事务插入满足那个WHERE条件的行,第一个事务重新读取相同条件的情况,在第二次读取中检索附加的 "phantom" 行。 (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Isolation.html#SERIALIZABLE)
如果您想限制对该方法的访问,也许您应该简单地使用同步关键字。