gpt4 book ai didi

spring - Spring Boot 中的事务同步

转载 作者:行者123 更新时间:2023-12-02 06:45:57 25 4
gpt4 key购买 nike

我有一个小型 Spring Boot 应用程序,其中包含 spring-boot-starter-webspring-boot-starter-data-jpapostgresql 作为依赖项。

我能够使用 @Transactional 注释并使用 JPA 来获取实体并将其保存到数据库中。但是,如果我通过注册同步来添加 afterCommit/afterCompletion Hook ,则会给出 IllegalStateException 表明 Transaction 同步不是活跃

TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
//this doesn't get called
log.info("do something here");
}
});

执行 TransactionSynchronizationManager.initSynchronization(); 可以消除错误,但不会调用 Hook (例如:afterCommit Hook 甚至不会被调用尽管事务已提交。)

关于如何调试这个的任何线索?

最佳答案

事实证明,我忘记包含用于为具有 @Transactional 注释的 bean 创建 AoP 代理的构建插件。

如果没有这个插件,就不会生成任何代理,并且代码将以非事务方式运行;除了当它进入 JpaRepository 方法时,它将在调用期间创建一个短期事务(例如 save/findAll/删除)。

这是我错过的包含在我的 pom.xml 中的插件(它是由 Spring Initializr ( https://start.spring.io/ )在 pom 输出中生成的,但我一开始没有注意到它,也没有将其复制到我的 pom)

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

关于spring - Spring Boot 中的事务同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48951243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com