一、事务管理
- 概念: 事务是一组操作的集合,这一组集合具有原子性,要么全部成功,要么全部失败。
- 作用: 当出现异常时,能有效控制数据不丢失。
- 使用方法—— 注解
(一)事务注解 @Tranactional
- 位置: 业务层(Service)方法上,类上,接口上
- 作用: 将当前方法交给Spring进行管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务。
//接口上
@Transactional
public interface EmpService{
void delete(Integer id);
}
//类上
@Transactional
class EmpController implements EmpService{
//方法上
@Transactional
@Override
public void delete(Integer id){
//处理代码
}
}
(二)事务常见参数、
1、rollbackFor 事务回滚属性
(1)设置原因: @Transactional 默认在出现Runtime异常才能回滚。
(2)设置事务回滚属性: @Transactional( rollbackFor = Exception.class )
2、propagation 事务传播行为
(1)概念: 当一个事务方法被另一个实物方法调用时,这个事务如何进行事务控制
(2)常见的传播行为
传播行为 | 说明 |
---|---|
REQUIRED(要求;需要) | 默认,需要事务,有则加入事务,无则创建事务 |
REQUIRES_NEW(要求新的) | 需要新事务,无论有无总是创建事务 |
SUPPORTS | 支持事务,有则加入事务,无则在无事务状态下运行 |
NOT_SUPPORTED | 不支持事务,在无事务状态下运行,如果存在事务,则挂起当前事务 |
MANDATORY(强制) | 必须有事务,否则抛异常 |
NEVER | 必须没有事务,否则抛异常 |
… |
二、AOP
(一)AOP基础
- 概念: Aspect Oriented Programming(面向切面编程、面向方面编程),其实是面向特定方法编程。
- 作用: 通过动态代理机制,对特定的方法进行编程。
- AOP的使用场景
- 记录操作日志
- 权限控制
- 事务管理
- …
- AOP的优点
- 代码无侵入: 不改变原有的方法执行体
- 减少重复代码: 抽取公共操作代码
- 提高开发效率: 可以进行统一的操作
- 维护方便: 改变额外代码或原始代码时,不需要依次修改。
- 使用AOP
- 添加依赖
org.springframework.boot.spring-boot-starter-aop
- 编写AOP程序
- 添加依赖
@Component //Spring容器进行管理
@Aspect //声明AOP
public class TimeAspect{
//@Around —— 环绕通知
//execution(返回值 作用的包名.类/接口.方法(参数)) —— 启动范围
@Around("execution(* com.zengoo.service.*.*(..))")
public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable{
//1.记录时间
long begin = System.currentTimeMillis();
//2.运行原始方法
//ProceedingJoinPoint 是原始方法切入点
Object result = joinPoint.proceed();
//3.记录时间
long end = System.currentTimeMillis();
return result