如何将 Micronaut 与 Spring Jdbctemplate 和事务一起使用?
How to use Micronaut with Spring Jdbctemplate and transactions?
预期行为
当使用 @Transactional 注释时,我希望数据库操作属于事务范围,如果任何步骤失败,应该进行回滚。
实际行为
目前的场景,即使有@Transactional注解,一旦操作失败,也不会回滚,造成不一致
重现步骤
- 在您的数据库中应用 DDL 脚本
- 在数据库上执行以下操作创建一个账户insert into ACCOUNTS (ACCOUNT_NUMBER, BALANCE) values('0000001',0.0)
- 运行 应用程序并执行以下 curl:
curl --location --request POST 'http://localhost:8080/deposit' \
--header 'Content-Type: application/json' \
--data-raw '{
"accountNumber": "0000001",
"amount": 999.20
}'
您将看到抛出 DataIntegrityViolationException,这是因为历史记录 table 有一个定义不正确的字段,其小数金额 (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 开发的,所以如果我能让这一点生效,转换会容易得多,也许我在文档中丢失了一些东西或者我'我在某些时候弄错了,感谢您的出色工作。
环境信息
操作系统:Windows11
JDK:祖鲁语 JDK 11.0.12
行家 3.6.3
Micronaut 2.5.4
示例应用程序
https://github.com/viniciusxyz/micronaut-transaction-failed
版本
2.5.4
我解决了问题。
只替换依赖:
<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>
预期行为
当使用 @Transactional 注释时,我希望数据库操作属于事务范围,如果任何步骤失败,应该进行回滚。
实际行为
目前的场景,即使有@Transactional注解,一旦操作失败,也不会回滚,造成不一致
重现步骤
- 在您的数据库中应用 DDL 脚本
- 在数据库上执行以下操作创建一个账户insert into ACCOUNTS (ACCOUNT_NUMBER, BALANCE) values('0000001',0.0)
- 运行 应用程序并执行以下 curl:
curl --location --request POST 'http://localhost:8080/deposit' \
--header 'Content-Type: application/json' \
--data-raw '{
"accountNumber": "0000001",
"amount": 999.20
}'
您将看到抛出 DataIntegrityViolationException,这是因为历史记录 table 有一个定义不正确的字段,其小数金额 (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 开发的,所以如果我能让这一点生效,转换会容易得多,也许我在文档中丢失了一些东西或者我'我在某些时候弄错了,感谢您的出色工作。
环境信息
操作系统:Windows11 JDK:祖鲁语 JDK 11.0.12 行家 3.6.3 Micronaut 2.5.4
示例应用程序
https://github.com/viniciusxyz/micronaut-transaction-failed
版本
2.5.4
我解决了问题。
只替换依赖:
<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>