mysql replication driver 在jdk1.6下失效问题解决
mysql diver包里有relication driver,可以在jdbc层进行读写分离,主写从读
默认的配置方式是指定driver为ReplicationDriver,并改写jdbc url
一起jquery,17jquery
Java代码
- jdbc.driverClassName=com.mysql.jdbc.ReplicationDriver
- 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代码
- ensureDriverLoaded();//确认是否加载driver,否则forName加载
- 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代码
- jdbc.driverClassName=com.mysql.jdbc.ReplicationDriver
- 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代码
- publicclassDriverextendsNonRegisteringDriverimplementsjava.sql.Driver{
- //~Staticfields/initializers
- //---------------------------------------------
- //
- //RegisterourselveswiththeDriverManager
- //
- static{
- try{
- java.sql.DriverManager.registerDriver(newDriver());
- }catch(SQLExceptionE){
- thrownewRuntimeException("Can'tregisterdriver!");
- }
- }
mysql replication driver 在jdk1.6下失效问题解决的更多相关文章
- MySQL Replication需要注意的问题
MySQL Replication 大家都非常熟悉了,我也不会写怎么搭建以及复制的原理,网上相关文章非常多,大家可以自己去搜寻.我在这里就是想总结一下mysql主从复制需要注意的地方.有人说主从复制很 ...
- 深入解析MySQL replication协议
Why 最开始的时候,go-mysql只是简单的抽象mixer的代码,提供一个基本的mysql driver以及proxy framework,但做到后面,笔者突然觉得,既然研究了这么久mysql c ...
- 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 ...
- Class.forName("com.mysql.jdbc.Driver") ;
try { Class.forName("com.mysql.jdbc.Driver") ; } catch(ClassNotFoundException e) { System. ...
- [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 ...
- php5.3新特性 之 mysql native driver(mysqlnd)
概述 本文主要写给sa看的.码农就不用看了. mysql native driver(mysqlnd) 自从php5.3.0开始成为官方源代码的一部分, 用来取代传统的mysql client lib ...
- 【转】关于Class.forName(“com.mysql.jdbc.Driver”)
原文:http://www.cnblogs.com/gaojing/archive/2012/03/23/2413638.html 传统的使用jdbc来访问数据库的流程为: Class.forName ...
- MySql Replication配置
一.前言 Mysql Replication作为读写分离的廉价解决方案,支持一主多备的方式进行数据存储,采用二进制日志传送,目前存在着广泛应用,网上相关概念也比较多,不再重复介绍.引用一张官方提供的R ...
- MySQL Replication 优化和技巧、常见故障解决方法
MySQL 主从同步错误(error)解决(转) sql_slave_skip_counter参数 附: 一些错误信息的处理,主从服务器上的命令,及状态信息. 在从服务器上使用show slave s ...
随机推荐
- win7打开网络看不到局域网的其他电脑
双击打开桌面上的“网络”,在打开的窗口中看不到局域网的其他电脑/计算机.以前都可以看到的.可能是没有开启网络发现的原因,可是我并没有关闭网络发现.不知,怎么回事? Windows7查看网络邻居要开启g ...
- zookeeper启动
Zookeeper启动总结1.实际项目用的是Linux,问题不大,本地开发学习用Windows,问题多多.2.Zookeeper3.5.1-alpha,和本地JDK1.7,有冲突,无法正常启动.3.Z ...
- Node.js——express
res.send(),比原生的 res.end() 强大,原生只支持字符串和Buffer对象,而且需要自己加响应报文头,send支持字符串.Buffer.Json对象.数组,而且自动加响应报文头 ap ...
- rem手机端页面自适应布局(待修正下一篇完美布局)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript操作DOM与jQuyer操作DOM的对比
1.通过jQuery方法包装后的对象,是一个类数组对象.它与DOM对象完全不同,唯一相似的是它们都能操作DOM. 2.通过jQuery方法包装后的对象,是一个类数组对象.它与DOM对象完全不同,唯一相 ...
- Winform中ListView鼠标移动使用toolTip显示信息
今天在做一个酒店管理系统的时候用到了ListView,突然想到是否能够当鼠标移动到某一项的时候给出具体房间的信息呢! 首先设置Listview的MouseMove事件 1.获取当前坐标的项 ListV ...
- 【分享】iTOP-iMX6UL开发板驱动看门狗 watchdog 以及 Linux-c 测试例程
iTOP-iMX6UL开发板看门狗测试例程,iTOP-iMX6UL 开发板的看门狗驱动默认已经配置,可以直接使用测试例程. 版本 V1.1:1.格式修改:2.例程修改完善,其中增加喂狗代码.1 看门狗 ...
- Winsock2_WSADATA
使用Winsock2进行win下网络编程的第一步是初始化Winsock.其中需要创建一个WSADATA类型的变量,这个变量用来保存Windows socket的实现信息. typedef struct ...
- swift VTables
VTables https://github.com/apple/swift/blob/master/docs/SIL.rst#vtables decl ::= sil-vtable sil-vtab ...
- 手机端打开调试工具,模拟console.log
将下列代码考入需要调试页面即可 <script src="//cdn.jsdelivr.net/npm/eruda"></script> <scrip ...