gpt4 book ai didi

java - Spring单例@Transactional并发访问

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:49 24 4
gpt4 key购买 nike

在带有 @Controller@Service、@Repository 的 Spring 3 MVC Web 应用程序场景中,如果我用 @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 )

如果你想限制对此方法的访问,也许你应该简单地使用synchronized关键字。

关于java - Spring单例@Transactional并发访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28503106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com