春季@transactional注释不适用于@rabbitlistener
我有一个带有@transactional
的RabbitMQ处理程序正在生成事务,但似乎没有加入抛出invaliddataAccessapiusageExpectexception
的事务。
@Component
@RabbitListener(queuesToDeclare = [Queue(name = QUEUE_NAME)], errorHandler = "RabbitErrorHandler")
class RabbitListener(
private val repository: RepositoryImpl,
) {
@Transactional
@RabbitHandler
fun receive(
@Payload
str: String
) {
println("Message Received: $str")
repository.save(SomeEntity()) // Doing Persist
}
}
TransActionInterceptor跟踪日志
[ntContainer#0-1] o.s.t.i.TransactionInterceptor : Getting transaction for [com.asomethings.listener.RabbitListener.receive]
[ntContainer#0-1] o.s.t.i.TransactionInterceptor : Completing transaction for [com.asomethings.listener.RabbitListener.receive] after exception: org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
I尝试装饰@transactional
在存储库方法上,该方法不起作用,也给出propagation.mandoration
也不起作用。
它工作的只有一种方法是执行entityManager.jointransaction()
,我认为这是不对的。
二手弹簧靴2.7.1和kotlin 1.7.0
I have a RabbitMQ handler annotated with @Transactional
is generating transaction but seems to not join the transaction which throws InvalidDataAccessApiUsageException
.
@Component
@RabbitListener(queuesToDeclare = [Queue(name = QUEUE_NAME)], errorHandler = "RabbitErrorHandler")
class RabbitListener(
private val repository: RepositoryImpl,
) {
@Transactional
@RabbitHandler
fun receive(
@Payload
str: String
) {
println("Message Received: $str")
repository.save(SomeEntity()) // Doing Persist
}
}
TransactionInterceptor TRACE Log
[ntContainer#0-1] o.s.t.i.TransactionInterceptor : Getting transaction for [com.asomethings.listener.RabbitListener.receive]
[ntContainer#0-1] o.s.t.i.TransactionInterceptor : Completing transaction for [com.asomethings.listener.RabbitListener.receive] after exception: org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
I tried decorating @Transactional
on repository method which didn't work and also giving Propagation.MANDATORY
didn't work either.
Only one way it worked was executing entityManager.joinTransaction()
which I think it is not right.
Used Spring Boot 2.7.1 and Kotlin 1.7.0
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论