diamond的相关原理介绍,我们已经通过其他的文章进行了讲解,这篇文章我们着重讲解下diamond的初始化配置,以及tddl的初始化配置。
下载、部署diamond
diamond的svn下载地址:http://code.taobao.org/svn//diamond/trunk(下载16版本的diamond,我们稍后要用到tddl,因此我们不能下载diamond的最新版本20,因为tddl的最新的源代码中调用diamond的源代码部分都是建立在diamond的16版本前的,比如调用的:diamond-client功能包下的com.taobao.diamond.manager.impl.DefaultDiamondManager的类,在tddl中就使用该类的Builder内部类,但是在16版本以后的diamond该类的源代码就发生了很大的变化,当然可以通过该svn的历史看到diamond之后版本的修改情况,如果是自己的工程需要用到tddl,那么我们可以选择最新版本的diamond进行下载)
下载完成后,mvn 一次(建议不要用eclipse下meven插件通过meven builder执行,最好在命令行执行(diamond根目录中,pom.mxl所在的目录,直接执行mvn jar:jar,一次生成每个子模块相应的jar文件))。
因为我们将diamond用作tddl的配置管理系统,而tddl也是meven项目,因此我们需要在注册中心,对diamond进行注册,便于tddl配置,注册diamond-client到注册中心(到生成好的diamond-client-2.0.5.3.taocode-SNAPSHOT.jar的所在目录,执行下述命令):
mvn install:install-file -Dfile=diamond-client-2.0.5.3.taocode-SNAPSHOT.jar -DgroupId=com.taobao.diamond -
DartifactId=diamond-client -Dversion=2.0.5.3.taocode-SNAPSHOT -Dpackaging=jar
命令行如果提示build success,表示成功,我们可以查看下注册的情况:
下载、部署tddl
tddl的svn下载地址:http://code.taobao.org/svn//tddl-dynamic-datasource/trunk
下载后,我们maven build该项目根目录下的pom.xml,发现错误,那么我们依次按照下述步骤来排除错误:
1)因为项目需要依赖ojdbc14,但是通过mvn build下载相关jar时,报错下面内容无法下载:http://repo.maven.apache.org/maven2/com/oracle/ojdbc14/10.2.0.3.0/ojdbc14-10.2.0.3.0.jar
进入网站去查看发现该文件已经不存在了,因此只能修改pom.xml文件中相关内容(注释掉根目录
下的pom.xml、tbdatasource、tddl-atom-datasource目录下的pom.xml文件的ojdbc14的依赖)
2)注释掉根目录以及下述目录(tddl-interact)下pom.xml文件中的一个插件内容(artifactId为maven-surefire-plugin的插件,该插件用作单元测试,因此我们可以不需要该插件,如果可以自己查看相关单元测试的类,然后引入到自己的项目中进行测试)。
3)tddl-common模块包中的类中会调用diamond项目的类,这个时候我们将在diamond的根据目下
执行:mvn -Dmaven.test.skip=true clean package install assembly:assembly -U 对源代码打包,然后把相关的client和utils的源代码jar包拷贝到tddl-common的对应目录中:
4)由于以下类都是单元测试类,对功能没有影响:
注释com.taobao.tddl.common.util.TimesliceFlowControlTest文件中的内容所有内容,只留类名
注释com.taobao.tddl.jdbc.atom.common.TAtomConfParserUnitTest类中的所有内容,只留类名
注释com.taobao.tddl.jdbc.atom.common.TAtomConURLToolsUnitTest类中的所有内容,只留类名
注释com.taobao.tddl.jdbc.atom.StaticTAtomDataSourceUnitTest类中的所有内容,只留类名
注释com.taobao.tddl.jdbc.atom.TAtomDataSourceUnitTest类中的所有内容,只留类名
注释com.taobao.tddl.jdbc.group目录下的类中的所有内容,只留类名(包含group下的子包的类)
com.taobao.tddl.common.util.TimesliceFlowControl类中的注释全部拿掉
经过上述的步骤后,我们就可以对tddl根目录下的pom.xml文件进行maven build了!
当两个maven项目都可以正确build后,导入tddl下tddl-sample的maven项目(
Tddl 动态数据源的开源代码中,有一个tddl-sample 工程, 该工程演示了如何使用tddl动态数据源.但需要一些配置支持,下面截图中发现多了一个jar包,因为我们要对tddl的atom进行测试,并测试diamond的效果,因此需要导入我们之前tddl build好的相关jar包,如果测试group,同样导入生成好的groupj的ar包):
配置diamond和tddl的测试环境
1)mysql用户的创建
创建一个tddl用户:密码为tddl,并赋予相应的权限,创建完成后,将数据库的配置信息(IP,用户名,密码)替换diamond-server工程的src/resources/jdbc.properties文件中的db.url,db.user,db.password属性内容,这里建立的库名,用户名和密码,必须和jdbc.properties中对应的属性相同,user.properties文件存放的是登录到diamond-server服务器中的用户名和密码,可以自由进行管理(默认用户名/密码:abc/123);
目录位置:
上述配置完成后,在diamond-server源代码根目录下,执行mvn clean package -Dmaven.test.skip,成功后会在diamond-server/target目录下生成diamond-server.war,我们生成好的war发布到tomcat下,tomcat的webapps下diamond-server的项目的根目录中需要建立文件diamond,文件内容是diamond-server的地址列表,一行一个地址,地址为IP,如:127.0.0.1,tomcat端口最好保持8080,不需要对tomcat进行任何改动.
2)客户端获取服务端地址,在本地host文件中添加(com.taobao.diamond.common.Constants.java的初始化配置中定义了a.b.c,可以修改其源代码配置):
ip a.b.c
3)diamond数据库和表的创建:
create database diamond; create table config_info ( id bigint(64) PRIMARY KEY NOT NULL auto_increment, data_id varchar(255) default NULL, group_id varchar(128) default NULL, content longtext NOT NULL, md5 varchar(32) default NULL, gmt_create datetime NOT NULL default '2013-05-01 00:00:00', gmt_modified datetime NOT NULL default '2013-05-01 00:00:00', UNIQUE KEY `uk_config_datagroup` (`data_id`,`group_id`) ) ;
4)启动tomcat,即启动了diamond-server:
这个时候我们经过相应的配置,就可以来动态管理你自己web项目的配置信息了,最好把你的web项目和diamond server是部署在不同机器上的,端口号一定是8080,不能修改(所以必须部署在不同的机器上),由于我们是tddl来测试配置的项目,因此我们无需配置,只需要发布diamond-server到tomcat下即可。
5)tddl库和表的创建:
AtomDataSource库和表
CREATE DATABASE `qatest_normal_0` CREATE TABLE `normaltbl_0001` ( `pk` int(11) PRIMARY KEY NOT NULL, `id` int(11) DEFAULT NULL, `gmt_create` date DEFAULT "2010-12-17", `name` varchar(30) DEFAULT NULL, `floatCol` float(9,3) DEFAULT "0.000" )
GroupDataSource库和表的脚本和上面脚本部分一样,只需要添加不一样的脚本:
CREATE DATABASE `qatest_normal_0_bac`; use est_normal_0_bac; CREATE TABLE normaltbl_0001 ( pk int(11) PRIMARY KEY NOT NULL, id int(11) DEFAULT NULL, gmt_create date DEFAULT "2010-12-17", name varchar(30) DEFAULT NULL, floatCol float(9,3) DEFAULT "0.000" )
6)登录后进入后台管理界面,然后点击“配置信息管理”—— “添加配置信息”,在输入框中输入dataId、group、内容,最后点击“提交”即可(tddl的配置方式来源于http://rdc.taobao.com/team/jm/archives/1642):
在diamond中配置Atom数据源(下述配置主要是管理tddl的动态数据源,如果是自己公司的项目,请自己添加相关dataId、group等)
Global配置
dataId:com.taobao.tddl.atom.global.qatest_normal_0 group:DEFAULT_GROUP content: ip=127.0.0.1 port=3306 dbName=qatest_normal_0 dbType=mysql dbStatus=RW
App配置
dataId:com.taobao.tddl.atom.app.tddl_sample.qatest_normal_0 group:DEFAULT_GROUP content: userName=tddl minPoolSize=1 maxPoolSize=2 idleTimeout=10 blockingTimeout=5 preparedStatementCacheSize=15 connectionProperties=characterEncoding=gbk
User配置(dataId最后一段'.tddl’和用户名紧相关,如果数据库用户名不是tddl,请修改这个dataId)
dataId:com.taobao.tddl.atom.passwd.qatest_normal_0.mysql.tddl group:DEFAULT_GROUP content: encPasswd=xxxxxxx(密文,请用tddl-atom-datasource工程下的JbossPasswordDecode的方法进行 编译获得)
在diamond中配置Group数据源(下述配置主要是管理tddl的动态数据源,如果是自己公司的项目,请自己添加相关dataId、group等)
配置Group一组对等的数据的读写权重
dataId:com.taobao.tddl.jdbc.group_V2.4.1_group_sample group:DEFAULT_GROUP content: qatest_normal_0:r10w10,qatest_normal_0_bac:r10w0
配置Atom(qatest_normal_0_bac)数据源
Global配置
dataId:com.taobao.tddl.atom.global.qatest_normal_0_bac group:DEFAULT_GROUP content: ip=127.0.0.1 port=3306 dbName=qatest_normal_0_bac dbType=mysql dbStatus=WR
App配置
dataId:com.taobao.tddl.atom.app.tddl_sample.qatest_normal_0_bac group:DEFAULT_GROUP content: userName=tddl minPoolSize=1 maxPoolSize=2 idleTimeout=10 blockingTimeout=5 preparedStatementCacheSize=15 connectionProperties=characterEncoding=gbk
User配置(dataId最后一段’.tddl’和用户名紧相关,如果数据库用户名不是tddl,请修改这个dataId)
dataId:com.taobao.tddl.atom.passwd.qatest_normal_0_bac.mysql.tddl group:DEFAULT_GROUP content: encPasswd=xxxxxxx(密文,请用tddl-atom-datasource工程下的JbossPasswordDecode的方法获得)
经过上述步骤后,tddl的数据源配置信息已经通过diamond-server添加到数据库diamond的config-info表中了,一共7条记录。
下面我们就可以通过代码去测试看看是否diamond-server存储的tddl的数据源是否正常被tddl例子调用了(atom、group相关的依赖已经在pom.xml中默认添加了,我们无需再次添加):
我们直接运行tddl-simple的com.taobao.tddl.sample.atom.AtomSample.java单元测试类,没有什么问题,如果是想更多的了解diamond以及tddl,我们可以把domind-client的单元测试类依次debug运行,这样我们可以更多的了解tddl以及diamond的实现细节。