springboot 事务原理
事务原理
springboot使用TransactionInterceptor拦截事务方法,执行事务操作
PersonService
public interface PersonService extends IService<Person> {
void savePerson(Person person);
}
PersonServiceImpl
@Service
public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person> implements PersonService {
@Resource
private PersonMapper personMapper;
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void savePerson(Person person) {
personMapper.insert(person);
if (person.getAge().equals(16)){
throw new RuntimeException("id为"+16+"的数据插入失败");
}
}
}
HelloController
@RestController
@RequestMapping("/person")
public class PersonController {
@Resource
private PersonService personService;
@RequestMapping("/hello")
public String hello(){
for (int i=0;i<10;i++){
Person person = new Person();
person.setName("瓜田李下 "+i);
person.setAge(10+i);
try {
personService.savePerson(person);
}catch (Exception e){
System.out.println(e.getMessage());
}
}
return "hello";
}
}
transactionInterceptor拦截调用栈
public class TransactionInterceptor extends TransactionAspectSupport implements MethodInterceptor, Serializable {
public TransactionInterceptor() {
}
public TransactionInterceptor(TransactionManager ptm, TransactionAttributeSource tas) {
this.setTransactionManager(ptm);
this.setTransactionAttributeSource(tas);
}
@Nullable
public Object invoke(MethodInvocation invocation) throws Throwable {