博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql replication driver 在jdk1.6下失效问题解决
阅读量:4454 次
发布时间:2019-06-07

本文共 1905 字,大约阅读时间需要 6 分钟。

mysql diver包里有relication driver,可以在jdbc层进行读写分离,主写从读

默认的配置方式是指定driver为ReplicationDriver,并改写jdbc url
一起jquery,17jquery

Java代码收藏代码

  1. jdbc.driverClassName=com.mysql.jdbc.ReplicationDriver
  2. jdbc.url=jdbc:mysql://192.168.1.23:3306,192.168.1.252:3306/my_db?useUnicode=true

ref.mysql doc 
但是在jdk1.6(win)下,这个配置不生效。升级driver jar依旧如此,最后只好debug connect过程,发现datasource的driver加载过程并不是直接用定义的driverClass去forName加载直接建立连接,而是分两个步骤:
Java代码收藏代码

  1. ensureDriverLoaded();//确认是否加载driver,否则forName加载
  2. nnectionout=driver().connect(jdbcUrl,overrideProps(username,password));//从已加载的drivers列表中取得能parseUrl的driver,并建立连接

问题就在第二步里产生。
com.mysql.jdbc下drivers的继承关系如下
NonRegisteringDriver //包含主要逻辑,包括解析url 
-|-Driver //空,无功能逻辑
|-NonRegisteringReplicationDriver //主要的replication逻辑
-|-ReplicationDriver //空,无功能逻辑
在jdk1.5下,drivers列表仅有 ensureDriverLoader()加载的 ReplicationDriver; 
在jdk1.6(win)下,ensureDriverLoader()方法加载 ReplicationDriver 过程里会先加载[com.mysql.jdbc.Driver, sun.jdbc.odbc.JdbcOdbcDriver](这里还没搞清楚,可能和jvm加载方式有关?)
导致 com.mysql.jdbc.Driver 用来建立connection,而非配置的 ReplicationDriver,replication的从读被忽略了
=============== 
解决办法却和上面的问题无关,而是在jdbc url里配上完整的replication信息,用"jdbc:mysql:replication://"替换原来的"jdbc:mysql://" Java代码收藏代码

  1. jdbc.driverClassName=com.mysql.jdbc.ReplicationDriver
  2. jdbc.url=jdbc:mysql:replication://192.168.1.23:3306,192.168.1.252:3306/my_db?useUnicode=true

因为在 Top driver的connect() 里实现了 ReplicationDriver的connect()功能,前提就是url里有replication串。
mysql driver代码里的诡异实现,难道是某种补丁?
关于Driver 和 ReplicationDriver的无功能逻辑的解释,只有这一个功能,载入实际功能类 
Java代码收藏代码

  1. publicclassDriverextendsNonRegisteringDriverimplementsjava.sql.Driver{
  2. //~Staticfields/initializers
  3. //---------------------------------------------
  4. //
  5. //RegisterourselveswiththeDriverManager
  6. //
  7. static{
  8. try{
  9. java.sql.DriverManager.registerDriver(newDriver());
  10. }catch(SQLExceptionE){
  11. thrownewRuntimeException("Can'tregisterdriver!");
  12. }
  13. }
关键字:mysql, ReplicationDriver mysql

转载于:https://www.cnblogs.com/seasonzone/p/3400177.html

你可能感兴趣的文章
Web用户的身份验证及WebApi权限验证流程的设计和实现
查看>>
hdu 2098 分拆素数和
查看>>
[ONTAK2010]Peaks kruskal重构树,主席树
查看>>
ECMAScript6-let与const命令详解
查看>>
iOS 使用系统相机、相册显示中文
查看>>
什么是敏捷设计
查看>>
SCSS的基本操作
查看>>
"安装程序无法定位现有系统分区" 问题解决
查看>>
.NET中栈和堆的比较
查看>>
【莫队】bzoj 3781,bzoj 2038,bzoj 3289
查看>>
如何优化limit
查看>>
几种常用数据库字段类型查询语句
查看>>
字符全排列
查看>>
提高效率必须改掉的7种习惯
查看>>
Java判断语句中判断条件的执行顺序
查看>>
Windows平台下tomcat+java的web程序持续占cpu问题调试
查看>>
OO第四次博客作业!
查看>>
HDU 吉哥系列故事——完美队形II 騰訊馬拉松初賽第二輪D題
查看>>
c++学习-继承
查看>>
[转]SQL Server 性能调优(io)
查看>>