业务逻辑是这样的:在调用服务的时候,先select这一行某个字段有没有值,没有才会去update。但是出现这一个问题,mybatis日志如下:
2022-01-20 13:41:03.523 [http-nio-8081-exec-7] DEBUG [省略]- ==> Preparing: SELECT count(1) FROM A WHERE [省略]
2022-01-20 13:41:03.523 [http-nio-8081-exec-7] DEBUG [省略] - ==> Parameters: 17228600(String)
2022-01-20 13:41:03.536 [http-nio-8081-exec-4] DEBUG [省略]- ==> Preparing: UPDATE A SET [省略]
2022-01-20 13:41:03.526 [http-nio-8081-exec-4] DEBUG [省略]- ==> Parameters: X879(String)
2022-01-20 13:41:05.624 [http-nio-8081-exec-7] DEBUG [省略]- <== Total: 1
2022-01-20 13:41:05.628 [http-nio-8081-exec-4] DEBUG [省略]-<== Updates: 1
线程7去select的时候,会等线程4执行update后,才会返回select结果。最后才是线程4返回update结果。
service层update的方法加了@Transactional,select 没加。