Microsoft SQL Server JDBC 的连接字符串 useBulkCopyForBatchInsert=true 导致SQL Server 部分字段未insert
问题前提:
DB数据库连接字符串中包含 useBulkCopyForBatchInsert=true
背景:
某一个测试环境(一段时间未更新程序,长期来看功能一直正常的测试环境)忽然出现异常,接口正常调用,但实际在DB校验数据,发现只insert了部分字段到数据库,部分字段为null(未insert到数据库)。
代码逻辑:批量insert(Mybatis Plus的insert接口)
日志打印十分正常,包含打印的Preparing SQL 以及实际insert的返回内容都符合正常逻辑。
看起来十分的玄幻,然而抽丝剥茧,发现根本原因,是之前压测时,因为请求耗时不稳定,尝试调整连接字符串进行优化请求耗时。
然后就放在那里,没有进行后续调整了。
直到这张表的表结构发生了改变,字段物理列顺序发生变化。
为什么日志是正常的?
因为useBulkCopyForBatchInsert控制的是 PreparedStatement.executeBatch() 的底层实现方式
原本目的是优化单表批量insert性能
发现了这个问题,移除连接字符串后,测试环境恢复正常
PS:useBulkCopyForBatchInsert会按照物理列顺序执行批量insert
作者:人间春风意
扫描左侧的二维码可以赞赏

本作品采用署名-非商业性使用-禁止演绎 4.0 国际 进行许可。

浙公网安备 33010602011771号