|
Java JDBC 之 rewriteBatchedStatements、allowPublicKeyRetrieval、allowMultiQueries、sslMode 配置性能优化。
jdbc 所有配置属性文档:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-configuration-properties.html
回顾:
allowPublicKeyRetrieval
在使用 MySQL 8.0 时重启应用后提示 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
最简单的解决方法是在连接后面添加 allowPublicKeyRetrieval=true
如果用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥;可以在连接中通过 ServerRSAPublicKeyFile 指定服务器的 RSA 公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥;但是需要注意的是 AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启。
rewriteBatchedStatements
MySQL的JDBC连接的url中要加rewriteBatchedStatements参数,并保证5.1.13以上版本的驱动,才能实现高性能的批量插入。MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。
只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL
另外这个选项对INSERT/UPDATE/DELETE都有效
MySQL Jdbc驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,直接造成较低的性能。
只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL (jdbc:mysql://ip:port/db?rewriteBatchedStatements=true)
allowMultiQueries
允许使用';' 在一个语句中分隔多个查询(真/假)。默认值为“false”,它不影响 addBatch() 和 executeBatch() 方法,它们依赖于 rewriteBatchStatements。
MySQL连接数据库时,添加语句:“allowMultiQueries=true”的作用:
1.可以在sql语句后携带分号,实现多语句执行。
2.可以执行批处理,同时发出多个SQL语句。
sslMode
默认情况下,网络连接是 SSL 加密的;此属性允许关闭安全连接,或选择不同的安全级别。允许以下值: "DISABLED" - 建立未加密的连接;“PREFERRED” - (默认)如果服务器启用加密连接,则建立加密连接,否则回退到未加密连接;"REQUIRED" - 如果服务器启用了安全连接,则建立安全连接,否则失败;"VERIFY_CA" - 与 "REQUIRED" 类似,但另外根据配置的证书颁发机构 (CA) 证书验证服务器 TLS 证书;"VERIFY_IDENTITY" - 像 "VERIFY_CA",
此属性替换了已弃用的旧属性“useSSL”、“requireSSL”和“verifyServerCertificate”,如果“sslMode”未明确设置,这些属性仍被接受但转换为“sslMode”的值:“useSSL=false”被转换为“sslMode=禁用”;{"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"} 被翻译成 "sslMode=PREFERRED"; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"} 被翻译成 "sslMode=REQUIRED"; {"useSSL=true" AND "verifyServerCertificate=true"} 被翻译成" “sslMode”的默认设置是“PREFERRED”,相当于传统的“useSSL=true”、“requireSSL=false”和“verifyServerCertificate=false”的设置,与Connector/的默认设置不同J 8.0.12 及更早版本在某些情况下。应审查继续使用旧属性并依赖其旧默认设置的应用程序。“sslMode”的默认设置是“PREFERRED”,相当于传统的“useSSL=true”、“requireSSL=false”和“verifyServerCertificate=false”的设置,与Connector/的默认设置不同J 8.0.12 及更早版本在某些情况下。应审查继续使用旧属性并依赖其旧默认设置的应用程序。在某些情况下为 12 或更早。应审查继续使用旧属性并依赖其旧默认设置的应用程序。在某些情况下为 12 或更早。应审查继续使用旧属性并依赖其旧默认设置的应用程序。
如果显式设置了“sslMode”,则忽略旧属性。如果没有明确设置“sslMode”或“useSSL”,则应用默认设置“sslMode=PREFERRED”。
jdbc 设置关闭安全连接:sslmode=disabled
|
上一篇:【转】Linux 批量重命名文件的方法下一篇:discuz 如何限制台湾用户注册,随意发布信息,写法求教。
|