代码世界聚眸光,昼夜敲盘思绪长。
算法心间精构建,编程路上细思量。
屏前架构乾坤定,键上飞驰智慧扬。
默默耕耘成果现,创新科技铸辉煌。
目录
一,概念
二,Spring事务管理
三,rollbackFor事务回滚
四,propagation传播行为
一,概念
二,Spring事务管理
下面我们举一个小例子来演示一下
首先创建一个Service的接口:
public interface IYZService {/*** 处理用户信息* */User dealUser(String name);/*** 测试* */User testUser(String name);
}
然后实现Service接口:
@Component //将当前容器交给IOC容器管理 成为IOC容器中的bean
public class YZService implements IYZService {@Autowired //运行时,IOC容器会提供该类型的bean对象,并赋值给该变量 这就是依赖注入private YZDao yzDao;@Overridepublic User dealUser(String name) {User user = yzDao.findUserByName(name);Address address = new Address();address.setCity("淄博");address.setProvince("山东");user.setAddress(address);return user;}@Overridepublic User testUser(String name) {User user = yzDao.findUserByName(name);Address address = new Address();address.setCity("淄博1");address.setProvince("山东1");user.setAddress(address);return user;}
}
Dao的接口和类:
public interface IYZDao {/** 根据用户姓名查找用户信息* **/User findUserByName(String name);
}
@Component //将当前容器交给IOC容器管理 成为IOC容器中的bean
public class YZDao implements IYZDao {@Overridepublic User findUserByName(String name) {User user = new User();user.setName(name);user.setAge(20);Address address = new Address();address.setProvince("北京");address.setCity("北京");user.setAddress(address);return user ;}
}
Controller层代码:
@RestController
public class RequestController {@Resource(name ="YZService")private IYZService yzService;@RequestMapping("/yzTestPath/{name}")public Result yzTestPath(@PathVariable String name){User user = yzService.dealUser(name);User user2 = yzService.testUser(name);List<User> list = new ArrayList<User>();list.add(user);list.add(user2);return Result.success(list);}
}
测试:
下面我们先定义一个全局的异常处理器:GlobalExceptionHandler
/*** 全局异常管理器* */
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public Result exception(Exception e) {e.printStackTrace();return Result.error("对不起,操作失败,请联系管理员");}
}
接下来我们模拟一个异常
@RestController
public class RequestController {@Resource(name ="YZService")private IYZService yzService;@RequestMapping("/yzTestPath/{name}")public Result yzTestPath(@PathVariable String name){User user = yzService.dealUser(name);//抛出异常int i =1/0;User user2 = yzService.testUser(name);List<User> list = new ArrayList<User>();list.add(user);list.add(user2);return Result.success(list);}
}
接着我们请求接口:
然后看控制台:
错误的堆栈信息也打印出来了。
接下来我们继续将事务管理,这里需要用到@Transactional这个注解:
这个注解一般是作用在业务层的曾删改这一层上面的
三,rollbackFor事务回滚
那么我们如果要指定在所有异常情况下都回滚呢?
@Component //将当前容器交给IOC容器管理 成为IOC容器中的bean
public class YZDao implements IYZDao {@Transactional(rollbackFor = Exception.class)@Overridepublic User findUserByName(String name) {User user = 数据库操作return user ;}
}
四,propagation传播行为
常见的传播行为
@Component //将当前容器交给IOC容器管理 成为IOC容器中的bean
public class YZDao implements IYZDao {@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)@Overridepublic User findUserByName(String name) {User user = new User();user.setName(name);user.setAge(20);Address address = new Address();address.setProvince("北京");address.setCity("北京");user.setAddress(address);test();return user ;}@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)public void test(){}
}