Skip to content

spring 事务 PROPAGATION_NESTED纠错#1611

Merged
Snailclimb merged 2 commits intoSnailclimb:mainfrom
1autodidact:patch-1
Mar 13, 2022
Merged

spring 事务 PROPAGATION_NESTED纠错#1611
Snailclimb merged 2 commits intoSnailclimb:mainfrom
1autodidact:patch-1

Conversation

@1autodidact
Copy link
Copy Markdown
Contributor

ROPAGATION_NESTED:如果当前存在事务,就在嵌套事务内执行;如果当前没有事务,就执行与PROPAGATION_REQUIRED类似的操作,子事务回滚外部主事务也会受到影响进行回滚

@service
public class UserInvokeService {
    @Autowired
    private UserService userService;
    @resource
    private UserMapper userMapper;

    @transactional
    public void invokeUserService() {
        User user = new User();
        user.setName("zxx");
        user.setAge(333333);
        userMapper.insert(user);
        userService.insertData();

    }
}


@service
public class UserService {

    @resource
    private UserMapper userMapper;


    @transactional(propagation = Propagation.NESTED)
    public void insertData() {
        User user = new User();
        user.setName("inserByNested");
        user.setAge(2222);
        userMapper.insert(user);
        int a = 1 / 0;
    }

}


@SpringBootTest
public class TransactionalTest {
    @Autowired
    UserService userService;
    @Autowired
    UserInvokeService userInvokeService;
    @test
    public void testTransaction() {
        userInvokeService.invokeUserService();
    }
}

ROPAGATION_NESTED:如果当前存在事务,就在嵌套事务内执行;如果当前没有事务,就执行与PROPAGATION_REQUIRED类似的操作,子事务回滚外部主事务也会受到影响进行回滚



``` 
@service
public class UserInvokeService {
    @Autowired
    private UserService userService;
    @resource
    private UserMapper userMapper;

    @transactional
    public void invokeUserService() {
        User user = new User();
        user.setName("zxx");
        user.setAge(333333);
        userMapper.insert(user);
        userService.insertData();

    }
}


@service
public class UserService {

    @resource
    private UserMapper userMapper;


    @transactional(propagation = Propagation.NESTED)
    public void insertData() {
        User user = new User();
        user.setName("inserByNested");
        user.setAge(2222);
        userMapper.insert(user);
        int a = 1 / 0;
    }

}


@SpringBootTest
public class TransactionalTest {
    @Autowired
    UserService userService;
    @Autowired
    UserInvokeService userInvokeService;
    @test
    public void testTransaction() {
        userInvokeService.invokeUserService();
    }
}
```
@1autodidact
Copy link
Copy Markdown
Contributor Author

第一次给那么大的项目提pr

@1autodidact
Copy link
Copy Markdown
Contributor Author

@Snailclimb

@Snailclimb
Copy link
Copy Markdown
Owner

@Snailclimb

ROPAGATION_NESTED:如果当前存在事务,就在嵌套事务内执行;如果当前没有事务,就执行与PROPAGATION_REQUIRED类似的操作,子事务回滚外部主事务也会受到影响进行回滚

@service
public class UserInvokeService {
    @Autowired
    private UserService userService;
    @resource
    private UserMapper userMapper;

    @transactional
    public void invokeUserService() {
        User user = new User();
        user.setName("zxx");
        user.setAge(333333);
        userMapper.insert(user);
        userService.insertData();

    }
}


@service
public class UserService {

    @resource
    private UserMapper userMapper;


    @transactional(propagation = Propagation.NESTED)
    public void insertData() {
        User user = new User();
        user.setName("inserByNested");
        user.setAge(2222);
        userMapper.insert(user);
        int a = 1 / 0;
    }

}


@SpringBootTest
public class TransactionalTest {
    @Autowired
    UserService userService;
    @Autowired
    UserInvokeService userInvokeService;
    @test
    public void testTransaction() {
        userInvokeService.invokeUserService();
    }
}

ROPAGATION_NESTED:如果当前存在事务,就在嵌套事务内执行;如果当前没有事务,就执行与PROPAGATION_REQUIRED类似的操作,子事务回滚外部主事务也会受到影响进行回滚

@service
public class UserInvokeService {
    @Autowired
    private UserService userService;
    @resource
    private UserMapper userMapper;

    @transactional
    public void invokeUserService() {
        User user = new User();
        user.setName("zxx");
        user.setAge(333333);
        userMapper.insert(user);
        userService.insertData();

    }
}


@service
public class UserService {

    @resource
    private UserMapper userMapper;


    @transactional(propagation = Propagation.NESTED)
    public void insertData() {
        User user = new User();
        user.setName("inserByNested");
        user.setAge(2222);
        userMapper.insert(user);
        int a = 1 / 0;
    }

}


@SpringBootTest
public class TransactionalTest {
    @Autowired
    UserService userService;
    @Autowired
    UserInvokeService userInvokeService;
    @test
    public void testTransaction() {
        userInvokeService.invokeUserService();
    }
}

👍

image

@Snailclimb Snailclimb merged commit cd80c29 into Snailclimb:main Mar 13, 2022
@Snailclimb Snailclimb added the doc-bug Content error label Mar 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

doc-bug Content error

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants