`

Grails 回滚编程性事务

 
阅读更多

本文总结了编程性事务和声明性事务回滚的两种方法,并提到了一个非常容易忽视的问题。

回滚编程性事务

编程性事务在Grails中是通过withTransaction方法实现的,它接收一个闭包,并且会把TransactionStatus传给这个闭包。要想回滚事务,调用TransactionStatus上的setRollbackOnly()方法即可。下面是一个账户转账的例子:

01 Account.withTransaction { status ->
02     
03     if(source.active) {
04         source.balance -= amount
05         if(dest.active) {
06             dest.amount += amount
07         }else {
08             status.setRollbackOnly()
09         }
10     }   
11 }

回滚声明性事务

利用服务,可以在Grails中轻松地实现声明性事务。如果要回滚事务,只要在服务的方法中抛出RuntimeException或其子类即可。看下面这个例子:

1 class DomainbService {
2     boolean transactional = true
3       
4     def service2() {
5         new B().save()
6         throw new RuntimeException("save b failed!")
7     }
8 }

这里需要注意的是,在Grails文档中并没有明确指出要抛出的必须是RuntimeException,而只是提到只要抛出Exception就可以了。但实际上,这是错误的。Spring的文档已经指出,对于声明性事务,方法需要抛出一个“unchecked”异常,这样才会触发回滚事务。

不信的话,各位可以试一试,把上面的RuntimeException换成Exception,对比前后数据库中的结果。在做这个实验时,请确保底层的数据库引擎是支持事务的,以免结果不正确。

分享到:
评论

相关推荐

    Grails Grails Grails

    总结来说,Grails 是一个强大的Web开发框架,借助Groovy的灵活性和Java生态的稳定性,为开发者提供了高效的开发环境。无论是初学者还是经验丰富的开发者,都能从Grails的简洁设计和强大功能中受益。通过深入学习...

    Grails权威指南 Grails权威指南

    1. **Groovy语言基础**:Grails基于Groovy,一种动态、灵活的Java平台上的编程语言。Groovy的语法简洁,支持函数式编程,且与Java高度兼容,使得开发者可以利用已有的Java知识快速上手。 2. **MVC架构**:Grails...

    grails中文入门简介

    GORM中的高级特性包括自定义映射选项、事务编程以及乐观锁和悲观锁等并发控制机制。 在Web层的开发中,Grails提供了灵活的控制器来处理请求和响应。它还包含了Groovy Server Pages(GSP),这是一种基于Groovy的...

    Grails探索之访问存储过程及其事务控制

    通过这种方式,可以更灵活地处理异常和回滚事务。 #### 四、总结 本文详细介绍了如何在Grails框架中访问存储过程以及如何进行事务控制。通过使用`Sql`类,开发者可以轻松地调用存储过程并处理返回值。同时,结合...

    Grails基础教程

    Grails采用声明式编程,大大减少了代码量,同时提供了强大的功能,如自动代码生成、AOP(面向切面编程)等。 1.4.3 吸取的经验教训 Grails借鉴了其他框架的优点,如Ruby on Rails,结合Java平台的优势,打造了一个...

    Grails入门指南中文第二版.pdf

    7. **Grails服务(Service)**:服务层在Grails中的作用,如何定义服务并进行事务管理。 8. **Grails过滤器(Filters)**:过滤器在应用程序中的应用,如何在特定的HTTP请求或响应之前/之后执行代码。 9. **Grails...

    grails-2.4.2开发包

    Grails构建在Spring框架之上,利用Spring的强大功能,如依赖注入(DI)、面向切面编程(AOP)以及事务管理。这使得Grails应用具备了企业级的稳定性和可扩展性,同时降低了系统的复杂度。 3. **Hibernate数据持久化...

    grails-petclinic, Grails的介绍性示例应用程序.zip

    grails-petclinic, Grails的介绍性示例应用程序 Petclinic示例应用程序这是Grails标准的介绍性示例应用程序。 要开始使用它,只需克隆存储库,然后从本地副本运行中进行操作: ./gradlew run 在unix系统上,或者 ...

    the definitive guide to grails 2

    Grails框架是建立在Groovy编程语言之上的一个完整的Web应用开发框架,它结合了Java平台的优势和动态语言的灵活性。Grails采用约定优于配置的原则,简化了开发流程,使开发者能够快速地构建高性能的Web应用程序。该...

    eclipse开发grails插件

    在IT行业中,开发Web应用程序时,我们经常使用各种框架来提高效率和灵活性。Grails就是一个基于Groovy语言的开源Web应用框架,它以其简洁的语法和强大的功能受到开发者的欢迎。与此同时,Eclipse作为一款强大的Java...

    grails-5.1.2.zip

    Grails 使用Groovy作为主要编程语言,Groovy是一种面向对象、动态类型的Java平台语言,它简化了语法,提供了更多的灵活性,同时保持与Java的互操作性。这使得开发者可以更快地编写代码,同时享受静态类型语言的安全...

    grails1.3.9

    这个版本,1.3.9,是在Grails框架历史中的一个重要里程碑,它集成了Groovy编程语言,Spring框架,Hibernate持久化库,以及其他标准的Java技术,为开发者提供了一站式的解决方案,简化了复杂的应用程序开发过程。...

    Grails权威指南 中文版

    除了上述内容,本书还探讨了Grails的高级特性,例如安全性、缓存和事务管理等。并且,由于Grails可以与Java无缝集成,读者还会学习到如何将Java和Grails结合起来,利用现有的Java技能和经验进行Web开发。 本书适合...

    grails-2.4.4.zip

    在实际开发中,了解并遵循Grails的最佳实践至关重要,例如,合理划分领域模型、充分利用GSP标签库、使用Service层处理业务逻辑等,能有效提高代码质量和维护性。 总结,Grails 2.4.4 作为一个成熟的Web开发框架,...

    Eclipse下搭建Grails项目

    【Grails项目搭建详解】 Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,尤其适合快速构建动态网站。在Eclipse中搭建Grails项目可能相对复杂,但通过以下步骤,即使是初学者也能顺利进行。 1. *...

    eclipse插件grails(groovy)

    Eclipse 插件 Grails(Groovy)是一个强大的开发工具,它...通过配置插件和环境,你可以利用Groovy的灵活性和Grails的高效框架,轻松构建Web应用程序。无论是新手还是经验丰富的开发者,都能从中受益,提升开发效率。

Global site tag (gtag.js) - Google Analytics