利用Spring AOP 封装事务类,自己的在方法前begin 事务,完成后提交事务,有异常回滚事务

比起之前的编程式事务,AOP将事务的开启与提交写在了环绕通知里面,回滚写在异常通知里面,找到指定的方法(切入点),代码如下:

代码在这个基础上重构:

https://www.cnblogs.com/pickKnow/p/11135310.html

@Component
@Aspect
@Scope("prototype")
public class AopTransaction { @Autowired
private TransactionUtils transactionUtils; @Around("execution (* com.hella.thread.aoptransaction.service.UserService.addUser(..) )")
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
//不要try catch 不然回滚不了,一直占用资源
System.out.println("开启事务");
TransactionStatus transactionStatus = transactionUtils.begin();
proceedingJoinPoint.proceed();
transactionUtils.commit(transactionStatus);
System.out.println("提交事务");
} @AfterThrowing("execution (* com.hella.thread.aoptransaction.service.UserService.addUser(..) )")
public void afterThrowing() {
System.out.println("事务开始回滚");
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
} }

那service 层方法里面就不需要再写事务的开启,提交,回滚了。

@Service
public class UserServiceImpl implements UserService { @Autowired
private UserDao userDao;
@Override
public void addUser() {
// 添加到数据库
System.out.println("开始添加");
userDao.add(1, "tom", "12");
}
}

事务框架之声明事务(自动开启,自动提交,自动回滚)Spring AOP 封装的更多相关文章

  1. CI框架的事务开启、提交和回滚

    1.运行事务 $this->db->trans_start(); // 开启事务$this->db->query('一条SQL查询...');$this->db-> ...

  2. sqlserver事务怎么开启 怎么提交 怎么回滚

    1.自动transaction每句statement都是一个transaction.例一个update指令更新多笔纪录, 要就全部成功, 只要失败,全部会回复原值. 2.ExplicitTransac ...

  3. JDBC_事务概念_ACID特点_隔离级别_提交commit_回滚rollback

    事务的概念 一组要么同时执行成功,要么同时执行失败的SQL语句,是数据库操作的一个执行单元! 事务开始于: 连接到数据库上,并执行一条DML语句(insert,update或delete),前一个事务 ...

  4. JDBC03 利用JDBC实现事务提交与回滚【调用Connection中的方法实现事务管理】

    目录 1 Connection中的重用方法 2 JDBC事务管理经典案例 1 Connection类中常用的方法回顾 1.1 Statement createStatement() throws SQ ...

  5. J2EE分布式事务中的提交、回滚方法调用异常。

    这个是昨天上班的时候,写一个后台程序的调试程序时碰到的问题,和项目经理纠结了一天,最后搞定了.于是今天上班正好闲着,花了几乎一天的时间去网上找各种相关的资料.目前了解的内容如此: 根据使用的weblo ...

  6. 14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚

    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚 如果自动提交模式被启用,在InnoDB里, 所有的用户活动发生在一个事务里, 每个SQL语句 ...

  7. ASP.NET(C#)事务的创建、提交以及回滚 (附代码)

    1.事务是什么?            事务是应用程序中一系列严密的操作,所有的操作必须全部成功完成,否则每个操作中的所有更改都会被撤销.也就是事务具有原子性,一个事务中的一系列操作要么全部成功,要么 ...

  8. 【转】批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚

    原文地址:http://blog.csdn.net/westsource/article/details/6658109 默认情况下,批量复制操作作为独立的操作执行. 批量复制操作以非事务性方式发生, ...

  9. 如何在mysql下实现事务的提交与回滚

    最近要对数据库的数据进行一个定时迁移,为了防止在执行过程sql语句因为某些原因报错而导致数据转移混乱,因此要对我们的脚本加以事务进行控制. 首先我们建一张tran_test表 CREATE TABLE ...

随机推荐

  1. 【视频+图文】带你快速掌握Java中含break语句的双重for循环

    双重for循环掌握后,我们就一起来看看双重for循环的进阶内容一之带break语句的双重for循环. 双重for循环[视频+图文]讲解传输门:点击这里可去小乔的哔哩哔哩观看~ 带continue语句的 ...

  2. 在WPF(core版本)中引用外部字体不可用问题说明

    这几天使用WPF写软件,想引用外部字体,于是下载了字体文件: 然后在App.xaml中添加了如下代码: <FontFamily x:Key="Digital-7 Mono"& ...

  3. 峰哥说技术:07-SpringBoot 正好Thymeleaf视图

    Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 07  峰哥说技术:SpringBoot 正好Thymeleaf视图 Spring Boot视图介绍 虽然 ...

  4. 小白学 Python 数据分析(15):数据可视化概述

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  5. Android开发进阶 -- 通用适配器 CommonAdapter

    在Android开发中,我们经常会用到ListView 这个组件,为了将ListView 的内容展示出来,我们会去实现一个Adapter来适配,将Layout中的布局以列表的形式展现到组件中.     ...

  6. 单列集合List

    1.Vector和ArrayList以及LinkedList区别和联系.应用场景 线程安全: Vector:如果创建Vector时没有指定容量,则默认容量为10,底层基于数组实现,线程是安全的,底层采 ...

  7. js 拖拽实现面向对象

    1.js 支持面向对象编程,但只是基于面向对象,不使用类或者接口.2.演变 工厂模式------->构造函数模式---------->原型模式 工厂模式的缺点: ①函数内部new ,不太符 ...

  8. emWin模拟器Visual Studio开发时无法printf打印的问题

    1.emWin模拟器 为了方便用户学习evWin框架,Segger设计了一个PC仿真的工具,可以测试绝大部分GUI的功能,除了方便使用者学习之外,还可以加速项目开发进度.毕竟在PC上用Visual S ...

  9. 使用JDBC工具类模拟登陆验证-Java(新手)

    模拟登陆验证: package JdbcDome; import java.sql.Connection; import java.sql.PreparedStatement; import java ...

  10. Swift4.1 新特性compactMap函数

    关于compactMap函数 苹果在Swift 4.1中新增compactMap函数,用来代替flatMap函数. 在Swift标准库中compactMap定义如下 public func compa ...