【已解决】佬们求助,Java boy遇到一个奇怪的问题

同步方法执行完了才会执行下面的异步方法啊,应该是睡一段时间后,事务提交完了自然读到?

main方法本身没有事务,insertData调用的是mybatis plus的插入方法,mybatis plus的插入方法应该是同步的,insertData和asyncGet应该没有影响吧 :thinking:

这个思路我明天去公司验证一下,感谢 :pray: :pray: :pray:

不对吧,为什么insertData(obj) 是同步操作, 那么下面的get方法就算是异步的, 应该也能直接取到?

这得看事务是不是在insertData提交了

感谢解答 :pray: :pray:,但是没有集群,我确认过了,只有一台数据库

如果事务在insertData已经提交了, 那么下面get是能取到的

应该就是我说的这个原因,话说楼主刚毕业吗,Spring的事务管理这方面你没学清楚,多看看这方面的文章吧,异步方法是另起的新事务,如果你想让他们在同一个事务中也有办法,获取同一个connection调用相关的方法就行了,B站上有相关视频

感谢回复 :pray: :pray:我明天去公司验证一下,但是mysql8.0同样的代码是可以获取到数据的,不需要sleep 100毫秒


难道…

只是加了sleep就能查到了吧,楼主提到8无法复现或许是8做了部分优化,所以我觉得是你之前说的提交延迟

你用的mybatisplus哪个方法?

感谢答疑:pray::pray:我明天去公司把 mysql,springboot,mybatis plus 版本记录一下,看看家里的电脑能否复现,我用 MySQL 8.0 是复现不成功的

感谢答疑:pray::pray:我明天去公司看看用的哪个方法,主要这段代码不是我写的,但是突然出现这个问题非常好奇

看下mbp底下源码实现,要么java里异步了,要么mysql那慢了

mybatis plus 可以设置id生成规则,并且插入数据后会给实体装入id,这个时候想对这个实体进行什么操作直接进行就可以了,不需要再查一遍数据库。

eg:

Entity entitiy = new Entity();
// 省略设置..
//此时entity 没有id
int i = baseMapper.insert(entity);

dosomething(entitiy); // 此时的entity是有id的

我也是来学的,这个8复现不了我觉得就是数据库的锅。除非那段插入方法事务注解属性值不是默认

另外,为啥提交完了立马查询???提交完了之后,你的对象里不是有值吗???这是甚么操作???如果存在这样的场景,建议先塞缓存再落库。。。

对了,我隐约记得mbp的方法是自带事务的,当时我还吃了个小亏

mbp用着有点别扭,我喜欢用tkmybatis. :smirk:

1 个赞

是的,它的savexxxx方法里自带事务

1 个赞