Spring单例@Transactional并发访问

时间:2015-02-13 15:35:12

标签: java spring spring-mvc java-ee transactions

在包含@Controller的Spring 3 MVC Web应用程序场景中,@Service, @Repository如果我使用@Service注释@Transactional类并将bean的范围保留为Singleton ,是否会在并发访问的情况下阻止服务方法?

在单例的情况下,因为在任何时间点应用程序上下文中都会有一个Service类实例,不同线程的后续请求,对于已在事务内执行的同一服务方法需要等待直到服务方法完成处理,如果这是真的,请告诉我。

我刚开始研究Java EE 6,其中@Stateless EJB用于服务类,并将其与Spring中的工作方式进行比较。

1 个答案:

答案 0 :(得分:1)

@Transactional指定在事务中执行方法代码。 根据底层数据存储区(@Transactional注释的隔离属性),有不同的事务隔离级别指定方法的行为。

是下一个隔离级别:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Isolation.html

此隔离级别是指基础数据存储,而不是方法。

最具侵略性的隔离级别是可序列化的: 一个常量,表示防止脏读,不可重复读和幻像读。此级别包括ISOLATION_REPEATABLE_READ中的禁止,并进一步禁止一个事务读取满足WHERE条件的所有行,第二个事务插入满足该WHERE条件的行,并且第一个事务重新读取相同条件的情况,检索附加“幻影“在第二次阅读中排。 (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Isolation.html#SERIALIZABLE

如果您想限制对此方法的访问,可能只需使用synchronized关键字。