spring支持什么传播

worktile 其他 13

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring框架提供了几种不同的传播行为,用于管理事务的提交和回滚。

    1. REQUIRED(默认值):如果当前存在事务,则加入该事务,如果不存在事务,则创建一个新事务。如果在方法执行过程中抛出异常,则回滚事务,如果方法成功执行,则提交事务。这种传播行为适用于大多数情况,它保证方法在一个事务中执行。

    2. SUPPORTS:如果当前存在事务,则加入该事务,如果不存在事务,则以非事务方式执行。这种传播行为适用于不需要事务保护的方法,它提供了一种轻量级的事务支持。

    3. REQUIRES_NEW:创建一个新的事务,并挂起当前事务(如果有的话)。如果方法执行过程中抛出异常,则回滚新事务,并且重新抛出异常,如果方法成功执行,则提交新事务。这种传播行为适用于需要独立事务的方法,它会暂停当前事务并创建一个新的事务。

    4. MANDATORY:如果当前存在事务,则加入该事务,如果不存在事务,则抛出异常。这种传播行为用于强制要求方法在一个事务中执行。

    5. NOT_SUPPORTED:以非事务方式执行方法,如果当前存在事务,则把它挂起。这种传播行为适用于不需要事务支持的方法,它完全忽略对事务的操作。

    6. NEVER:以非事务方式执行方法,如果当前存在事务,则抛出异常。这种传播行为适用于希望方法不在事务中执行的情况。

    7. NESTED:如果当前存在事务,则在嵌套事务中执行方法,如果不存在事务,则创建一个新事务。子事务的提交和回滚不会对父事务产生影响,只有当父事务提交时,子事务的修改才会生效。如果在子事务执行过程中抛出异常,则回滚子事务和父事务,并抛出异常。这种传播行为适用于需要嵌套事务的情况。

    总结:Spring框架支持多种传播行为,开发人员可以根据需求选择适合的传播行为来管理事务的提交和回滚。不同的传播行为可以满足不同的业务需求,提供了灵活的事务管理方式。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring框架支持以下几种事务传播行为:

    1. REQUIRED (默认值):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播行为,也是默认的传播行为。

    2. REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务并加入进去。如果当前存在事务,则将该事务挂起。

    3. MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

    4. SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。

    5. NOT_SUPPORTED:如果当前存在事务,则将该事务挂起;以非事务的方式执行。

    6. NEVER:如果当前存在事务,则抛出异常;以非事务的方式执行。

    7. NESTED:如果当前存在事务,则在该事务的嵌套事务中执行;如果当前没有事务,则创建一个新的事务。

    这些事务传播行为可以通过使用@Transactional注解或编程式事务管理来指定。在Spring中,可以使用@Transactional注解来标记希望进行事务管理的方法,同时可以使用TransactionTemplate编程式事务管理来实现更高度的灵活性和控制。使用事务传播行为可以确保在方法调用链中的多个事务方法之间正确管理事务的传播和隔离性。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring框架支持以下几种事务传播行为:

    1. REQUIRED:如果当前已经存在事务,则加入到当前事务中执行;如果当前没有事务,则创建一个新的事务执行。这是默认的传播行为。

    2. SUPPORTS:如果当前已经存在事务,则加入到当前事务中执行;如果当前没有事务,则以非事务方式执行。

    3. MANDATORY:如果当前已经存在事务,则加入到当前事务中执行;如果当前没有事务,则抛出异常。

    4. REQUIRES_NEW:如果当前已经存在事务,则挂起当前事务,并创建一个新的事务执行;如果当前没有事务,则创建一个新的事务执行。

    5. NOT_SUPPORTED:以非事务方式执行;如果当前存在事务,则挂起当前事务。

    6. NEVER:以非事务方式执行;如果当前存在事务,则抛出异常。

    7. NESTED:如果当前已经存在事务,则在一个嵌套的事务中执行;如果当前没有事务,则创建一个新的事务执行。在嵌套事务中,如果发生异常,只回滚嵌套事务,不影响外部事务。

    在Spring中配置事务传播行为可以使用@Transactional注解或者在XML配置文件中使用tx:advicetx:method元素来实现。下面是一个示例:

    @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserDao userDao;
    
        @Transactional(propagation = Propagation.REQUIRED)
        public void addUser(User user) {
            userDao.addUser(user);
        }
    
        @Transactional(propagation = Propagation.REQUIRES_NEW)
        public void deleteUser(String userId) {
            userDao.deleteUser(userId);
        }
    
        @Transactional(propagation = Propagation.NOT_SUPPORTED)
        public User getUser(String userId) {
            return userDao.getUser(userId);
        }
    }
    

    该示例中,addUser方法使用了REQUIRED传播行为,deleteUser方法使用了REQUIRES_NEW传播行为,getUser方法使用了NOT_SUPPORTED传播行为。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部