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

mysql replication driver 在jdk1.6下失效问题解决的更多相关文章

  1. MySQL Replication需要注意的问题

    MySQL Replication 大家都非常熟悉了,我也不会写怎么搭建以及复制的原理,网上相关文章非常多,大家可以自己去搜寻.我在这里就是想总结一下mysql主从复制需要注意的地方.有人说主从复制很 ...

  2. 深入解析MySQL replication协议

    Why 最开始的时候,go-mysql只是简单的抽象mixer的代码,提供一个基本的mysql driver以及proxy framework,但做到后面,笔者突然觉得,既然研究了这么久mysql c ...

  3. Oozie时出现org.apache.oozie.service.ServiceException: E0103: Could not load service classes, Cannot load JDBC driver class 'com.mysql.jdbc.Driver'

    不多说,直接上干货! 问题详情 查看你的$OOZIE_HOME/logs 我的是/home/hadoop/app/oozie-4.1.0-cdh5.5.4/logs/oozie.log文件 [hado ...

  4. Class.forName("com.mysql.jdbc.Driver") ;

    try { Class.forName("com.mysql.jdbc.Driver") ; } catch(ClassNotFoundException e) { System. ...

  5. [bigdata] 启动CM出现 “JDBC Driver class not found: com.mysql.jdbc.Driver” 以及“Error creating bean with name 'serverLogFetcherImpl'”问题的解决方法

    问题:“JDBC Driver class not found: com.mysql.jdbc.Driver”  通过以下命令启动cm [root@hadoop1 ~]# /etc/init.d/cl ...

  6. php5.3新特性 之 mysql native driver(mysqlnd)

    概述 本文主要写给sa看的.码农就不用看了. mysql native driver(mysqlnd) 自从php5.3.0开始成为官方源代码的一部分, 用来取代传统的mysql client lib ...

  7. 【转】关于Class.forName(“com.mysql.jdbc.Driver”)

    原文:http://www.cnblogs.com/gaojing/archive/2012/03/23/2413638.html 传统的使用jdbc来访问数据库的流程为: Class.forName ...

  8. MySql Replication配置

    一.前言 Mysql Replication作为读写分离的廉价解决方案,支持一主多备的方式进行数据存储,采用二进制日志传送,目前存在着广泛应用,网上相关概念也比较多,不再重复介绍.引用一张官方提供的R ...

  9. MySQL Replication 优化和技巧、常见故障解决方法

    MySQL 主从同步错误(error)解决(转) sql_slave_skip_counter参数 附: 一些错误信息的处理,主从服务器上的命令,及状态信息. 在从服务器上使用show slave s ...

随机推荐

  1. C#中实现C++中的友元类

    最近做一个小程序,一个类A(负责显示处理)需要大量调用类B(负责数据处理)的函数,我最先想到的C++中的友元概念,因为类B中的这些函数并不希望public,它只是允许类A调用监测. 网上搜索了一下,没 ...

  2. hadoop-2.4.1集群搭建及zookeeper管理

    准备 1.1修改主机名,设置IP与主机名的映射 [root@xuegod74 ~]# vim /etc/hosts 192.168.1.73 xuegod73 192.168.1.74 xuegod7 ...

  3. SharePoint2013升级SP1后,运行配置向导报错:未注册sharepoint服务

    SharePoint Server 2013 升级SP1后,需要重新运行配置向导,但是运行过程中报错:未注册sharepoint服务. 日志详细错误信息: 已引发类型为 Microsoft.Share ...

  4. Elasticsearch--集群管理_别名&插件&更新API

    目录 使用索引别名 别名 创建别名 修改别名 合并命令 获取所有别名 移除别名 别名中过滤 别名和路由 Elasticsearch插件 基础知识 安装插件 移除插件 更新设置API 使用索引别名 通过 ...

  5. Spark学习之Spark SQL(8)

    Spark学习之Spark SQL(8) 1. Spark用来操作结构化和半结构化数据的接口--Spark SQL. 2. Spark SQL的三大功能 2.1 Spark SQL可以从各种结构化数据 ...

  6. 实现上下全屏幕屏滚动效果js

    ---恢复内容开始--- 详情见代码 第一步:首先添加3个js文件: 1.http://cdn.staticfile.org/jquery/1.8.3/jquery.min.js 2.http://c ...

  7. 使用Jenkins进行android项目的自动构建(4)

    加入单元测试 android单元测试很多都是使用Instrumentation进行的,这里讲的是试用JUnit,为什么用JUnit呢?因为使用Instrumentation需要打包apk安装,然后再进 ...

  8. asterisk-java ami5 分机状态,挂机原因之类的

    这些东西网上随便一找一大堆,也只是记录下自己找的.方便以后自己复制粘贴用. 最后为啦实现分机状态在web的实时更新,我选择啦使用websocket. //获得分机状态 public static St ...

  9. (转)Nutz | Nutz项目整合Spring实战

    http://blog.csdn.net/evan_leung/article/details/54767143 Nutz项目整合Spring实战 前言 Github地址 背景 实现步骤 加入spri ...

  10. js 类似于移动端购物车删除,左移动删除

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...