当前使用版本(必填,否则不予处理)
3.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
在Controller层注解了@DS,用的非master库,在service层代码如下,就是在循环中查询了一下,使用java8提供的parallel方法时,循环第一个查询是正常的,第二次之后就自动把数据源切换到master库了,不是我在Controller层用@DS指定的库了。不用parallel时一切正常
serviceStockInstallRecordVo.getSn().stream().parallel().forEach(sn -> {
queryWrapper.eq("sn", sn);
Integer count = serviceStockInstallRecordMapper.selectCount(queryWrapper);
if (count > 0) {
repeatSns.add(sn);
}
});
重现步骤(如果有就写完整)
同上
报错信息
因自动切换到默认的库,报错表不存在
\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'ccsx_data.service_stock_install_record' doesn't exist\r\n### The error may exist in com/sonoscape/ccs/data/mapper/ServiceStockInstallRecordMapper.java (best guess)\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT COUNT(1) FROM service_stock_install_record WHERE (sn = ? AND sn = ?)\r\n### Cause: java.sql.SQLSyntaxErrorException: Table 'ccsx_data.service_stock_install_record' doesn't exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table 'ccsx_data.service_stock_install_record' doesn't exist
Comment From: miemieYaho
parallel 是异步的
Comment From: ChenSino
parallel 是异步的
额,为啥异步的在循环第二次及之后@ DSz注解就不生效了呢,不太明白
Comment From: huayanYu
@chen462488588 DS是基于ThreadLocal的,异步新开了线程了