当前使用版本(必填,否则不予处理)
Mysql == 8.0.28
该问题是如何引起的?(确定最新版也有问题再提!!!)
造数据时偶然发现,多线程并发复用LambdaUpdateWrapper导致全表数据更改 没找到相关说明 未验证模拟生产多用户同时请求结果,类似pv、uv的操作,此结果是一个请求开线程池的结果,搬砖任务繁重......没有继续研究下去了也没有翻源码 本人实际生产不是这么写的,测试造数据有类似写法...提出来看看怎么回事避个雷
重现步骤(如果有就写完整)
value = value+1 只更新id=1 线程池并发
关键代码:
@GetMapping("/test")
public void test() {
ExecutorService executorService = Executors.newFixedThreadPool(5);
LambdaUpdateWrapper<TestTable> testTableLUW = new LambdaUpdateWrapper<>();
testTableLUW.setSql("value = value + 1")
.eq(TestTable::getId, 1L);
for (int i = 0; i < 5; i++) {
executorService.submit(() -> {
for (int j = 0; j < 100; j++) {
testTableService.update(testTableLUW);
}
});
}
}
@TableName("test_table")
@Schema(name = "TestTable对象", description = "")
public class TestTable implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "主键")
@TableId("id")
private Long id;
@JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
@TableField("value")
private CustomerStatusEnum value;
报错信息
执行前数据库:
执行后:
Comment From: miemieYaho
不支持多线程
Comment From: ChiMuYuan
@miemieYaho 感觉可以在警告提一嘴...