关闭

简单单解决你的事务回滚问题

204人阅读 评论(0) 收藏 举报
分类:
/**
     * 用户登录接口
     * 
     * 
     * 1明确事务方法前的命名规则
     * 2保证事务方法执行的时间尽可能的短,不允许出现循环操作,不允许出现RPC等网络请求操作
     * 3不允许所有的方法都使用事务,节省服务器性能和缩短数据库连接时间
     * 4如果出现有多个地方需要事务回滚时,使用自定义或原有的异常进行抛出,异常必须继承RunTimeError,否则不会触发回滚操作
     * 5使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行手动回滚
     * 
     */
    @Transactional
    public UserModel login(UserModel user){
        
        UserModel userEntity = new UserModel();
        
        
        userEntity = userDao.login(user);
        if(userEntity == null)
        {
            return null;
        }
        
        userEntity = userDao.login(user);
        if(userEntity == null)
        {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return null;
        }
        else
        {
            return userEntity;
        }
    }




直接给出一个例子代码,上面只是记录一下,下面才是干货。

首先很多时候我们不会采用事务操作,但是当我们在一个服务层多次访问数据库特别是进行插入删除操作的时候,我们需要使用事务进行操作,也就是一个不成功,所有的操作全部回滚。

那么具体的事务特性我就不多说了,规范我也打在最上面的注释里面了。主要注意一下,

使用@Transactional 注解

如果第一次插入成功,第二次插入失败,执行TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 这条语句之后,第一次的插入动作就被回滚了,也就是并没有生效。

手动回滚看起来会比较实用一些。

然后对于抛出异常的那种自动回滚可以参考百度各种代码。比较麻烦一些,就不列举了。

 

补充一下:

使用Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();  设置回滚点,使用TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);回滚到savePoint。
 
 
后序补充详细属性配置(复杂)
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Spring事物设置回滚点

@Transactional @RequestMapping("/show") public String show(){ userService.addUser(); ...
  • qq_27347991
  • qq_27347991
  • 2017-03-01 14:41
  • 987

@Transactional注解事务不回滚不起作用无效

这几天在项目里面发现我使用@Transactional之后,抛了异常居然不回滚。后来终于找到了原因。 如果你也出现了这种情况,可以从下面开始排查。一、特性先来了解一下@Transactional注解...
  • u011410529
  • u011410529
  • 2017-01-09 11:23
  • 12850

常见事务并发问题以及处理方法

1、数据库事务并发会引起那些常见问题以及对应的解决方法? 1)丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。 2)脏读:一个事务读到另一个事务未提交的更新数据。 3)幻读:一...
  • songwei128
  • songwei128
  • 2015-02-05 21:40
  • 2328

Spring TestContext 做带事务回滚的JUnit测试

1. 首先导入相关jar包和library  jar包在Spring的lib下 Spring-test这个jar   然后导入JUnit4的library 这个不用我教了吧。。。   2....
  • banqgg
  • banqgg
  • 2016-10-26 16:13
  • 1363

spring+ mybatis 事务不能回滚问题解决

最近遇到一个回滚问题,百度了一天了,终于解决了; 百度上遇到很多中情况,我记录的情况主要是一下几点,但都解决不了,可能是错误类型不同,我的解决方式如下 我的事务管理用的是aop我贴出代码: tx:a...
  • u013306146
  • u013306146
  • 2017-04-25 13:52
  • 1866

mybatis整合spring、springmvc时业务层无法进行事务回滚问题解决

前言:近期换了新公司,刚来公司就接触了一下mybatis,因为springmvc和spring比较熟悉,我想大概现在绝大部分的公司都在用吧,刚接触mybatis时感觉真心蛋疼,纯sql才处理业务,实在...
  • jaedong4j
  • jaedong4j
  • 2016-04-07 17:22
  • 7174

融云集成简单单聊

先导入从融云官网上下载的SDK,根据自己的需要导入清单配置打开 IMLib Module 的 AndroidManifest.xml 文件,把 meta-data RONG_CLOUD_APP_KEY...
  • Mango_ct
  • Mango_ct
  • 2017-12-27 09:49
  • 22

Hibernate(1)Hibernate简介和简单示例,了解Hibernate事务回滚用法

1 Hibernate简介 Hibernate是一个orm(object relation mapping 对象关系映射)框架,处于项目的持久层,也叫持久层框架(持久层框架还有ojb等)。 Hiber...
  • u013943420
  • u013943420
  • 2017-04-27 22:49
  • 586

JDBC--编程之事务处理--回滚的简单实例

代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; ...
  • a1491758730
  • a1491758730
  • 2015-10-08 18:44
  • 204

VUE起步构建简单单页应用

环境搭建工作: 1.先安装node,git工具(便于命令行操作) 2.换源(npm淘宝镜像网站:https://npm.taobao.org/)   命令:npm install -g cnpm --...
  • gaoxuaiguoyi
  • gaoxuaiguoyi
  • 2017-03-22 21:27
  • 519
    个人资料
    • 访问:157820次
    • 积分:2513
    • 等级:
    • 排名:第16966名
    • 原创:79篇
    • 转载:109篇
    • 译文:1篇
    • 评论:9条
    最新评论