java - 在Spring Boot中使用@transactional注释控制方法中的执行顺序
问题描述
我有一个类似的方法:
@Component
class test{
@Autowire
private MongoService mongo;
@Autowire
private KafkaMessageService kafka;
@Transactional
public void method(){
mongo.save(model); //saves data in mongo
kafka.send(message); //sends kafka message
}
}
因此,在这种情况下,我有一个要求,即当事务成功时(无异常),应首先提交mongo.save(model) ,然后只发布一条 Kafka 消息,但有时观察到首先发送 Kafka 消息,然后是 Mongo 中的提交,我需要更新的 mongo 数据在服务中发布 Kafka 消息,否则它将是脏读。
有没有办法在@Transactional 中序列化这些内部方法调用?如果两个失败中的任何一个失败,我也需要回滚
我的疯狂猜测是,当事务完成时,这两种方法都在并行线程中运行,或者在 mongo 中提交可能比发布消息花费更多时间。
解决方案
推荐阅读
- json - 如何在flutter中本地获取json文件中的json数据
- kotlin - Jetpack Compose - TextOverflow.Ellipsis 在不指定 maxLines 的情况下不起作用
- java - jetty-logging.properties 不适用于 servlet
- r - 如何在 EMR 集群上安装 SparkR 2.4.7 版?
- sql - SQL Server - 从名称列表中获取首字母
- javascript - 为什么在尝试使用 NodeJS 和 Tedious 将数据插入 SQL Server 时出现此错误?
- python - 如何分层画布椭圆?
- python - 棉花糖中字段验证的自定义错误消息问题
- python - 显示超过 9 张带有 subplot 和 MNIST 的图片
- javascript - Chrome 扩展:使用 runtime.sendMessage/onMessage、Async/Await 和 MV3 修复异步响应