当前位置: 首页 > 知识库问答 >
问题:

如何使用Micronaut与Spring Jdbc模板和事务?

燕禄
2023-03-14

使用@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
}'

您将看到一个DataWellityViolationExcema被抛出,这是因为历史表有一个定义不明确的字段,其中有一个十进制的金额(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,它们都是用jdbc模板开发的,所以如果我能做到这一点,过渡会容易得多,也许我在留档中丢失了一些东西,或者我在某个时候弄错了,谢谢为了好的工作。

操作系统:Windows11JDK:ZULUJDK11.0。12 Maven 3.6。3微米AUT 2.5。4.

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

2.5.4.

共有1个答案

奚正谊
2023-03-14

我解决了问题。

只需替换依赖项:

        <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>
 类似资料:
  • 我是Micronaut框架的新手,我正在尝试使用entitymanager创建我的存储库。我这样创建了我的存储库 我使用这个类实现接口并注入entitymanager 问题是我一直有这个错误: PS:我已经启用了注释处理

  • 是否有任何示例项目展示了如何将Kafka与Micronaut结合使用?我很难让它工作。 我有以下制片人: 听众: 我的申请。yml包含: 以及应用测试。yml(这是正确的吗?它应该与application.yml位于同一目录中吗?还不确定嵌入式服务器应该如何使用): 我的测试结果如下: 我面临的主要问题是: > 我的消费者没有从我的主题中消费。我可以看到制作者在Kafka中创建了主题,并且创建了客

  • 我尝试为API控制器编写UnitTest,它使用来自micronaut-data-jpa的CrudRepository。我使用@mockbean来模拟控制器中的协作存储库。如果我运行测试,我会得到以下错误: 没有这样的方法[findById(java.lang.object)] 我从未使用过Spock、Micronaut-Data或Micronaut-Test,只从以下来源尝试过: https:/

  • 问题内容: 它们都使用相同的语法来插入变量。例如,如果我想要以下内容 在我的下划线中,我的主要EJS中断,因为它试图替换用户名,并且主页中不存在此类变量。 问题答案: 我认为方括号默认情况下可以在EJS中使用: 而且,如果您需要更高级的知识,EJS github页面将介绍如何创建自定义标签: 我认为第二个“更高级”部分可能特定于服务器端应用程序 https://github.com/visionm

  • 更新:链接到repo被移动到回答,因为repo现在使用下面回答中的代码更新。 问题描述 当前代码正在运行,但它正在使用谷歌/云sdk的gcloud测试版模拟器pubsub进行集成测试。 由于google/cloud d-sdk映像的大小,集成测试很慢 pubsub模拟器必须在固定端口上运行,似乎没有办法告诉Micronaut模拟器在哪个端口上运行 我需要在maven surefire插件中设置以下

  • 使用,我在基本模板中定义了一个,其中包含默认内容。在某些情况下,我希望这个块为空,所以我想我可以重新定义它的名称,并使它不包含以下内容: 不知何故,Go似乎认为这个定义是“零”,并且仍然会呈现默认内容,除非我将任何非空白内容放入定义中。 我在Golang repo上发现了这个问题,它在一个游乐场示例中很好地描述了同样的事情: 奇怪的是,这个问题提到它是固定的(如果我理解正确的话,它在1.8.1中着