首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Grails (2.3) @Transactional不回滚

Grails是一种基于Groovy语言的开源Web应用框架,它结合了Spring框架和Hibernate ORM框架的优势,提供了简单、高效的开发方式。@Transactional是Grails框架中的一个注解,用于标记事务的边界。

在Grails中,默认情况下,所有带有@Transactional注解的方法都会在发生异常时回滚事务。但是,有时候我们可能希望在特定情况下不回滚事务,这时可以使用一些技巧来实现。

一种常见的情况是,我们希望在某个方法中捕获异常并处理,而不希望回滚整个事务。为了实现这个目标,可以在方法上添加@Transactional注解,并设置其属性noRollbackFor为指定的异常类型。例如,如果我们不希望回滚事务,即使发生了RuntimeException异常,可以这样写:

@Transactional(noRollbackFor = RuntimeException.class) def someMethod() { // 业务逻辑代码 }

这样,即使在someMethod()方法中发生了RuntimeException异常,事务也不会回滚。

除了noRollbackFor属性,@Transactional注解还有其他一些属性可以用来控制事务的行为,例如:

  • propagation:指定事务的传播行为,默认为REQUIRED。
  • isolation:指定事务的隔离级别,默认为DEFAULT。
  • readOnly:指定事务是否为只读,默认为false。
  • timeout:指定事务的超时时间,默认为-1,表示不超时。

总结起来,Grails中的@Transactional注解可以用来标记事务的边界,并通过设置不同的属性来控制事务的行为。在特定情况下,可以使用noRollbackFor属性来指定不回滚的异常类型,从而实现不回滚事务的需求。

关于Grails框架的更多信息和使用方法,可以参考腾讯云的产品介绍页面:Grails

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java的@Transactional事务回

@Transactional 基本原理概述 在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@Transactional...处理Springboot下提交事务异常,数据库没有回的问题 Spring文档中说道,Spring声明式事务管理默认对非检查型异常和运行时异常进行事务回,而对检查型异常则不进行回操作。...默认规则: 1、让检查型异常也回,@Transactional(rollbackFor=Exception.class),一般只需添加这个即可 2、让非检查型异常不回,@Transactional(...若同一类中的其他没有@Transactional 注解的方法内部调用有@Transactional 注解的方法,有@Transactional 注解的方法的事务被忽略,不会发生回。...注解,但它被内部方法 insert 调用,事务被忽略,出现异常事务不会发生回

2.2K30

捕获异常抛出事务不回

方法名上加注解事务 @Transactional 使用注解的简单模式,报错会回,但是如果方法中捕获异常后手动抛出异常,事务并没有回。...默认spring事务只在发生未被捕获的 RuntimeException 时才回。...spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回,默认情况下aop只捕获 RuntimeException 的异常,但可以通过配置来捕获特定的异常并回...在catch中抛出异常时抛出异常类型为 RuntimeException ,经测试 Exception 确实不可以回。 2....如果catch中有其他需要不可以抛出 RuntimeException ,可以手动回事务: TransactionAspectSupport.currentTransactionStatus().setRollbackOnly

1.5K30
  • 面试遇到Spring双层事务不回怎么破?

    最近有粉丝在朋友圈问我,面试遇到了Spring双事务不会问题,怎么破解。本文结合一个简单案例,希望能解决一部分人的疑惑。...系统 A 调用系统 B 执行数据同步,系统 B 返回了错误提示,系统 A 需要将前边保存的回掉,同时把错误信息向上抛。...NoteServiceImpl implements NoteService { @Resource private SearchService searchService; @Transactional...7、PROPAGATION_NESTED 开始执行事务前,先保存一个savepoint,当发生异常时,就回滚到savepoint;没有异常时,跟着外部事务一起提交或回。...3、事务提交时,进行事务状态的判断,就发现这个事务是失败的,需要回,所以抛出了 Transaction silently rolled back because it has been marked

    82210

    面试遇到Spring双层事务不回怎么破

    最近有粉丝在朋友圈问我,面试遇到了Spring双事务不会问题,怎么破解。本文结合一个简单案例,希望能解决一部分人的疑惑。...系统 A 调用系统 B 执行数据同步,系统 B 返回了错误提示,系统 A 需要将前边保存的回掉,同时把错误信息向上抛。...NoteServiceImpl implements NoteService { @Resource private SearchService searchService; @Transactional...7、PROPAGATION_NESTED 开始执行事务前,先保存一个savepoint,当发生异常时,就回滚到savepoint;没有异常时,跟着外部事务一起提交或回。...3、事务提交时,进行事务状态的判断,就发现这个事务是失败的,需要回,所以抛出了 Transaction silently rolled back because it has been marked

    22720

    每日一博 - 常见的Spring事务失效&事务不回案例集锦

    修复方法二:【在该Service类中注入自己】 修复方法三:【通过AopContent类】<---- 推荐 访问权限问题 方法用final修饰 未被spring管理 多线程调用 表不支持事务 未开启事务 事务不回...---- 事务不回 错误的传播特性 在使用@Transactional注解时,是可以指定propagation参数的。...---- 自定义了回异常 在使用@Transactional注解声明事务时,有时我们想自定义回的异常,spring也是支持的。可以通过设置rollbackFor参数,来完成这个功能。...方法里的内容,不回 userMapper.insertUser里的内容,即回保存点。。...死锁 回时间长 并发情况下,连接池被占满 锁等待 接口超时 主从延迟 ---- 小结 建议在项目中少使用@Transactional注解开启事务。

    1.4K10

    多线程事务怎么回?说用 @Transactional 可以重开了

    } 1.最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回。...2.在spring中可以使用@Transactional注解去控制事务,使出现异常时会进行回,在多线程中,这个注解则不会生效,如果主线程需要先执行一些修改数据库的操作,当子线程在进行处理出现异常时,主线程修改的数据则不会回...* @param employeeDOList */ @Override @Transactional public void saveThread(List employeeDOList...) { try { //先做删除操作,如果子线程出现异常,此操作不会回 this.getBaseMapper().delete(null); /...Transactional注解没有生效。

    1.6K10

    MYSQL 由一个锁问题,带出MYSQL事务错误不回的问题

    到此出现错误的信息的原因大概是弄清了, 其实到这里我们今天的主题才刚刚开始,问题是如果在 update 语句之前事务中还有其他的udpate语句, 到底是回不回。 ?...答案是: 不 不 不回 我们看一下是不是这样: 1 session 1 begin; 2 session 1 update a set name = 'aaa' where name >...这就是今天关键,按照传统数据库来说, 当然是不能,应该全部回。 那你的MYSQL 这里一8.019 为例 , 答案是什么。 ?...这就和SQL SERVER 默认的事务执行的方式一样, 如果事务错误,则上面执行的就不回 OMG, 我想着绝对和开发人员想的不大一样。...他的功能是,自动回不会发生InnoDB锁等待超时错误。并且这个参数需要关闭MYSQL 在配置文件中配置,在重启动生效。 session 2 ? session 1 ?

    93630

    SpingBoot:事务@Transactional注解不生效场景简介及事务回

    一、@Transactional注解 声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回事务。...简而言之,@Transactional注解在代码执行出错的时候能够进行事务的回。 1.在启动类上添加@EnableTransactionManagement注解。...@Transactional 注解属性 rollbackFor 设置错误 rollbackFor 可以指定能够触发事务回的异常类型。...三、@Transactional 1....@Transactional 使用@Transactional后,当程序发生RuntimeException运行时异常在没有使用try,catch进行捕获的时候,程序都会中止,当程序发生中止,则会触发数据库的回

    34810

    1.非 public 方法解决方案

    在 Spring Boot 中,造成事务不自动回的场景有很多,比如以下这些: 非 public 修饰的方法中的事务不自动回; 当 @Transactional 遇上 try/catch 事务不自动回...; 调用类内部的 @Transactional 方法事务不自动回; 抛出检查异常时事务不自动回; 数据库不支持事务,事务也不会自动回。...1.非 public 方法解决方案 非 public 方法中事务不回的直接原因是,在非 public 方法上添加的 @Transactional 关键字是无效的,也就是此方法本身是以非事务的方式运行的...3.调用内部 @Transactional 方法解决方案 调用类内部 @Transactional 的方法不自动回事务的原因是,@Transactional 是基于 Spring AOP 实现的,而...,如下图所示: 检查异常不回事务的原因是因为,@Transactional 默认只回运行时异常 RuntimeException 和 Error,而对于检查异常默认是不回的。

    69810

    Spring的事务详解

    Spring事务使用AOP的机制实现,会在@Transactional注解修饰的方法前后分别织入开启事务的逻辑,以及提交或回的逻辑。...正常 异常 均回 正常 异常,并try-catch异常 不回 requiresNew 不管客户端有没有事务服务器段都新起一个事务 如果客户端有事务就将事务挂起 子事务 主事务 结果 异常 正常,并...try-catch异常 子回,主不回 正常 异常 子不回,主回 异常 正常 均回 supports 如果客户端没有事务服务端也没有事务 如果客户端有事务服务端就加一个事务 mandatcry...如果当前没有事务,则进行与REQUIRED类似的操作 子事务 主事务 结果 异常 正常,并try-catch异常 子回,主不回 正常 异常 均回 异常 正常 均回 编程式事务 Javax.transaction.UserTranscation...如果你想要回特定的异常类型的话,可以这样设置: @Transactional(rollbackFor= MyException.class) 事务的不回策略 不回策略noRollbackFor,用于指定不触发事务回的异常类型

    15440

    java事务回案例_java事务控制

    疑问,确实像往常一样在service上添加了注解 @Transactional,为什么查询数据库时还是发现有数据不一致的情况,想想肯定是事务没起作用,出现异常的时候数据没有回。...spring事务不回的两个原因 总结一下导致事务不回的两个原因,一是Service类内部方法调用,二是try…catch异常。 1....,同样的你也可指定不回的规则,下面的一个例子告诉你,即使遇到未处理的 InstrumentNotFoundException 异常时,Spring FrameWork 的事务框架同样会提交事务,而不回...}) 还有更灵活的回规则配置方法,同时指定什么异常回,什么异常不回。...以上这篇完美解决Spring声明式事务不回的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    1.6K10

    spring事务回的多种方式「建议收藏」

    注解事务:直接在Service层的方法上面加上@Transactional注解,个人比较喜欢用这种方式。 2.事务不回的原因 在工作中,看过别人写的代码出现了事务不回的现象。...当然,事务不回的都是采用的声明式事务或者是注解事务;编程式事务都是自己写代码手动回的,因此是不会出现不回的现象。...下面说说我经常见到的3种事务不回的产生原因: (1)声明式事务配置切入点表达式写错了,没切中Service中的方法 (2)Service方法中,把异常给try catch了,但catch里面只是打印了异常信息...具体的用法可以参见考下面的伪代码 /** TransactionAspectSupport手动回事务:*/ @Transactional(rollbackFor = { Exception.class...(Controller)上的@Transactional注解,而不是你services上的@Transactional注解。

    2K40

    spring的@Transactional(rollbackFor=Exception.class)的使用

    (Errors 也一样 - 默认地 - 标识事务回。)从事务方法中抛出的Checked exceptions将不被标识进行事务回。...1 让checked例外也回:在整个方法前加上 @Transactional(rollbackFor=Exception.class) 2 让unchecked例外不回: @Transactional...) 注意: 如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回必须再往外抛try{}catch{throw Exception}。...你当然可以在接口上使用 @Transactional 注解,但是这将只能当你设置了基于接口的代理时它才生效。...因此,请接受Spring团队的建议并且在具体的类上使用 @Transactional 注解。     @Transactional 注解标识的方法,处理过程尽量的简单。

    1.3K10
    领券