druid连接池中开启AOP事务

上一篇文章我们介绍了springboot如何集成druid。今天在这个基础上面,增加AOP切面开启方法。

1.首先在application.yml中增加AOP相关配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
spring:
datasource:
druid:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/youMysql?useSSL=false
username: root
password: pwd
driver-class-name: com.mysql.jdbc.Driver
max-wait: 20000
max-active: 20
initial-size: 1
min-idle: 1
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.minimal.service.*
filters: stat,wall
filter:
stat.log-slow-sql: true
stat.slow-sql-millis: 2000
web-stat-filter:
enabled: true
url-pattern: /*
stat-view-servlet:
enabled: true
url-pattern: /druid/*

aop-patterns中添加切面的包路径即可。下面我们来测试一下,我们的切面是否生效。

2.这边我们新增一个方法,这个方法包含在切面中,方法代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Override
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public void test(String flag) throws Exception {
System.out.println("1111111111");
User user = new User();
user.setId("10000");
user.setOpenid("10000");
user.setNickname("10000");
user.setHeadPortrait("10000");
user.setAccount("10000");
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
user.setCoin(new BigDecimal(0));
user.setIsDelete(1);
user.setVersion(1);
userMapper.insert(user);
if("1".equals(flag)){
throw new Exception();
}
user.setId("10001");
userMapper.insert(user);
System.out.println("2222222222");
}

我们先来执行一下flag=”1“的http请求,看看接口报错之后是否发生回滚操作。

image

我们可以看到后台已经发生异常了,现在我们打开数据库查询一下,是否有数据插入到数据库中。

image

我们发现没有数据插入,所以事务是生效的,接下来我们执行一下flag=”0“的http请求。

image

我们可以很明显的看到,有两条数据插入到数据库中,所以方法执行成功了。

总结

druid已经给我们提供很简单的AOP功能了,只要配置相应的切面位置即可,但是我们配置完毕之后,切记要实际测试一遍,验证最终是否生效,否则会出大问题的。

更多内容敬请关注:“林老师带你学编程

林老师带你学编程 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!