我遇到了 MySQL db 的问题,即使没有自动提交模式更改,也会多次记录 setAutocommit。例如,如果我调用 setautocommit(false) 5 次,我会在查询日志中看到 5 个查询说 set autommit=0;
这通常不应该发生,因为自动提交模式没有改变。仅当我更改自动提交模式时才应发送查询,即说 1 到 0。
当我查看 MySQL 连接类实现时,我发现他们检查 useLocalSessionState 值来决定是否要执行查询?
if ((getUseLocalSessionState()) && (this.autoCommit == autoCommitFlag)) {
needsSetOnServer = false;
}
因此,即使 this.autocommit 和 autocommit 标志相同,也不会将 needsSetOnServer 设置为 false,因为 useLocalSessionState 默认为 false。
在我的连接 URL 中添加 useLocalSessionState = true 后,我看不到不必要的查询日志。
所以,我的问题是:
- useLocalSessionState 的意义是什么?为什么普遍使用?
- 设置 useLocalSessionState = true 是否安全?
PS:我看到 SQL Server 在没有任何此类依赖项的情况下处理这种情况,即(来自 SQLServerConnection 的代码片段
if (paramBoolean == this.databaseAutoCommitMode) {
return;
}