![](/img/trans.png)
[英]Should @transactional services be singleton or prototype in spring?
[英]Spring singleton @Transactional concurrent accesses
在使用@Controller
@Service, @Repository
@Controller
, @Service, @Repository
的Spring 3 MVC Web应用程序场景中@Service, @Repository
如果我使用@Transactional
注释@Service
类,并将bean的范围保留为Singleton,则事务管理器会在出现以下情况时阻塞该服务方法:并发访问?
在单例的情况下,由于在任何时间点在应用程序上下文中都会有一个Service类实例,因此不同线程对已在事务内部执行的同一服务方法的后续请求需要等待,直到该服务为止。方法已完成处理,如果是这样,请告诉我。
我刚刚开始研究Java EE 6,并将@Stateless EJB用于服务类,并将其与Spring中的工作方式进行比较。
@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 )
如果您想限制对此方法的访问,则应该只使用synced关键字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.