|
|
1
4
预期行为为:
基本上,这是预期的行为,现在是解释。 您的所有服务方法都是Transactional,因为您的服务名称上方有一个@Transactional。
默认情况下,每个Transactional方法都具有PROPAGATION。REQUIRED属性集。
这意味着当服务方法运行时,它将使用在作业中创建的当前事务。这里有一个棘手的部分,当一个功能具有多个事务性部分时,它会评估每个事务性部分的回滚条件,因此当您 方法() throws RuntimeException它将您的事务设置为仅回滚,但会一直持续到该事务结束(当Model.withTransaction..完成时),并在此时回滚所有事务。 更深入地说,您有三个部分可以将Transaction设置为rollbackOnly。
当事务结束时,事务将回滚,并且该时刻在 使用事务{..} 完成。 因此,您需要非常小心处理您的交易。 为了解决你的问题,你可以 方法() 仅通过设置 更新数据库() 作为服务类中的事务性,并从服务名称上方删除@transactional。
只将一个方法设置为@Transactional会使该方法成为Transactional,而不是所有方法都是事务性的。 我做了一个项目作为示例,这样你就可以运行测试并自己检查它,我还设置了log4j来显示事务的生命周期,这样你可以更好地理解它,你只需要运行MyProcessorIntegrationSpec.groovy https://github.com/juandiegoh/grails-transactions-rollback 希望它有帮助! |
|
|
user1020455 · 弹簧靴2.0-石英和弹簧集成-不工作 8 年前 |
|
|
Ray · 从石英迁移。净2到3铸造错误 8 年前 |
|
|
Csanchez · 石英CronTrigger多次自动点火 8 年前 |
|
|
Innet · QuartzJob中的EntityManager为空 8 年前 |
|
|
Bhavesh · WebAPI 2计划不工作 8 年前 |
|
|
Naxos84 · CronExpression每2天一次 8 年前 |