spring事务测试
1.启动类添加@EnableAspectJAutoProxy(exposeProxy = true) 添加AOP事务
2.代码
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserMapper mapper;
//只有d被@Transactional修饰,当c直接调用d,抛出异常,数据不回滚,当使用(calssname)AopContext.currentProxy调用d抛出异常,数据回滚
@RequestMapping("/c")
public void c() {
this.d(); //抛出异常但是数据库数据不回滚
//((UserController) AopContext.currentProxy()).d(); // 抛出异常,数据回滚
}
@Transactional
@RequestMapping("/d")
public void d() {
user u = new user();
u.setNumber(1);
u.setName("LCF05");
u.setSex(0);
u.setAge(18);
mapper.insertUser(u); // 插入数据 用自己的即可
int a = 4 / 0; // 手动异常
}
//a和b都用@Transactional修饰了,抛出异常,a和b都全部回滚
@Transactional
@RequestMapping("/a")
public void a() {
user u = new user();
u.setNumber(1);
u.setName("lcf01");
u.setSex(0);
u.setAge(18);
mapper.insertUser(u); // 插入数据 用自己的即可
this.b();
int a = 4 / 0;
}
@Transactional
@RequestMapping("/b")
public void b() {
user u = new user();
u.setNumber(1);
u.setName("lcf01");
u.setSex(0);
u.setAge(18);
mapper.insertUser(u); // 插入数据 用自己的即可
}
/*e用@Transactional修饰,f用@Transactional(propagation = Propagation.REQUIRES_NEW)修饰,
e使用(classname)AopContext.currentProxy()调用f,
实现了e回滚,f正常插入数据*/
@Transactional
@RequestMapping("/e")
public void e() {
user u = new user();
u.setNumber(1);
u.setName("test01");
u.setSex(0);
u.setAge(18);
mapper.insertUser(u); // 插入数据 用自己的即可
((UserController)AopContext.currentProxy()).f();
int a = 4 / 0;
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
@RequestMapping("/f")
public void f() {
user u = new user();
u.setNumber(1);
u.setName("test02");
u.setSex(0);
u.setAge(18);
mapper.insertUser(u); // 插入数据 用自己的即可
}
}
springboot事务
1.启动类无需注入@EnableAspectJAutoProxy(exposeProxy = true) ,因为springboot会自主配置好AOP事务
2.代码块
@RestController
@RequestMapping("/userDemo")
public class UserDemoController {
@Resource
private UserMapper mapper;
//只有d被@Transactional修饰,d抛出异常,c正常,d数据回滚
@RequestMapping("/c")
public void c() {
user u = new user();
u.setNumber(1);
u.setName("test01");
u.setSex(0);
u.setAge(18);
this.d(); //抛出异常数据库数据回滚
}
@Transactional
@RequestMapping("/d")
public void d() {
user u = new user();
u.setNumber(1);
u.setName("test02");
u.setSex(0);
u.setAge(18);
mapper.insertUser(u); // 插入数据 用自己的即可
int a = 4 / 0; // 手动异常
}
//a和b都用@Transactional修饰了,a抛出异常,a和b都全部回滚
@Transactional
@RequestMapping("/a")
public void a() {
user u = new user();
u.setNumber(1);
u.setName("TEST01");
u.setSex(0);
u.setAge(18);
mapper.insertUser(u); // 插入数据 用自己的即可
this.b();
int a = 4 / 0;
}
@Transactional
@RequestMapping("/b")
public void b() {
user u = new user();
u.setNumber(1);
u.setName("TEST02");
u.setSex(0);
u.setAge(18);
mapper.insertUser(u); // 插入数据 用自己的即可
}
//e和f都用@Transactional修饰了,f抛出异常,e和f都全部回滚
@Transactional
@RequestMapping("/e")
public void e() {
user u = new user();
u.setNumber(1);
u.setName("test01");
u.setSex(0);
u.setAge(18);
this.f(); //抛出异常数据库数据回滚
}
@Transactional
@RequestMapping("/f")
public void f() {
user u = new user();
u.setNumber(1);
u.setName("test02");
u.setSex(0);
u.setAge(18);
mapper.insertUser(u); // 插入数据 用自己的即可
int a = 4 / 0; // 手动异常
}
}