场景一
举例:同一个类中方法调用,这种情况下事务是不起作用的。如下:
public class UserServiceImpl implements UserService{
public void a() {
b();
}
@Transactional
public void b() {
return 1/0;
}
public static void main(String args[]) {
a();
}
}
原因:同一个类中,方法之间的调用不走代理,所以事务管理无法加载事务。所以事务不起作用
解决方案一:使用两个不同的类,满足事务管理的要求。如下:
public class UserServiceImpl implements UserService{
@Autowired
AdminService adminService;
public void a() {
adminService.b();
}
public static void main(String args[]) {
a();
}
}
public class AdminServiceImpl implements AdminService{
@Transactional
public void b() {
return 1/0;
}
}
解决方案二:手动添加事务,手动添加的方式很多,举例如下:
public class UserServiceImpl implements UserService{
public void a() {
b();
}
public void b() {
try{
return 1/0;
}catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
public static void main(String args[]) {
a();
}
}