【问题标题】:How to use Micronaut with Spring Jdbctemplate and transactions?如何将 Micronaut 与 Spring Jdbctemplate 和事务一起使用?
【发布时间】:2021-12-30 12:07:58
【问题描述】:

预期行为

当使用 @Transactional 注释时,我希望数据库操作属于事务范围,如果任何步骤失败,则应该进行回滚。

实际行为

在当前场景下,即使有@Transactional注解,万一操作失败,回滚也不做,造成不一致

复制步骤

  1. 在您的数据库中应用DDL 脚本
  2. 对数据库执行如下操作创建账户插入ACCOUNTS(ACCOUNT_NUMBER,BALANCE)值​​​('0000001',0.0)
  3. 运行应用程序并执行以下 curl:
curl --location --request POST 'http://localhost:8080/deposit' \
--header 'Content-Type: application/json' \
--data-raw '{
  "accountNumber": "0000001",
  "amount": 999.20
}'

您将看到抛出 DataIntegrityViolationException,这是因为历史记录表有一个定义不明确的字段,其小数金额 (2,2) 并且存款金额不匹配,在这种情况下,我预计账户余额更新为被反转,但是这不会发生。

我看到已经关闭了关于问题 #651 的问题,但 micronaut 数据文档表明此功能有效,因为在第 10 项中有以下文本:

In addition to this dependency you will need either spring-orm (for Hibernate) or spring-jdbc (for JDBC) on your classpath to enable support for Spring-based transaction management:

你能澄清一下吗?我们计划将一些应用程序从 spring 迁移到 micronaut,它们都是使用 jdbctemplate 开发的,所以如果我能做到这一点,过渡会容易得多,也许我在文档中丢失了一些东西,或者我弄错了在某些时候,感谢您的出色工作。

环境信息

操作系统:Windows 11 JDK:祖鲁 JDK 11.0.12 Maven 3.6.3 Micronaut 2.5.4

示例应用程序

https://github.com/viniciusxyz/micronaut-transaction-failed

版本

2.5.4

【问题讨论】:

    标签: java transactions jdbctemplate micronaut


    【解决方案1】:

    我解决了这个问题。

    只需替换依赖即可:

            <dependency>
                <groupId>io.micronaut.data</groupId>
                <artifactId>micronaut-data-spring</artifactId>
                <scope>compile</scope>
            </dependency>
    

    每个:

                <dependency>
                    <groupId>io.micronaut.spring</groupId>
                    <artifactId>micronaut-spring</artifactId>
                    <scope>compile</scope>
                </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 2011-08-20
      • 2011-11-22
      • 1970-01-01
      • 2010-09-09
      • 2017-09-17
      相关资源
      最近更新 更多