首页
学习
活动
专区
工具
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

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

相关·内容

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

    Spring框架的事务基础架构代码将默认地只在抛出运行时和unchecked exceptions时才标识事务回滚。 也就是说,当抛出个RuntimeException 或其子类例的实例时。(Errors 也一样 - 默认地 - 标识事务回滚。)从事务方法中抛出的Checked exceptions将不被标识进行事务回滚。 1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class) 2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class) 3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED) 注意: 如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。 注意:     Spring团队的建议是你在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上。你当然可以在接口上使用 @Transactional 注解,但是这将只能当你设置了基于接口的代理时它才生效。因为注解是不能继承的,这就意味着如果你正在使用基于类的代理时,那么事务的设置将不能被基于类的代理所识别,而且对象也将不会被事务代理所包装(将被确认为严重的)。因此,请接受Spring团队的建议并且在具体的类上使用 @Transactional 注解。     @Transactional 注解标识的方法,处理过程尽量的简单。尤其是带锁的事务方法,能不放在事务里面的最好不要放在事务里面。可以将常规的数据库查询操作放在事务前面进行,而事务内进行增、删、改、加锁查询等操作。

    01

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券