TDDL+DIAMOND的配置及使用(三):TDDL

原创 2015年11月18日 17:06:26

TDDL依赖于Diamond,在Diamond部署完毕后,才可以使用TDDL。
1. 获取代码:TDDL的svn地址为:http://code.taobao.org/svn/jltddl/,直接check out最新的代码即可(version: r14)。
2. 配置修改:TDDL的代码是GBK编码,首先需要检查pom.xml并加入编码配置,否则编译之后会出现解码错误:

  1. <plugin>                               
  2.   <artifactId>maven-compiler-plugin</artifactId>
  3.   <configuration>
  4.        <source>1.6</source>
  5.        <target>1.6</target>                                       
  6.        <encoding>GBK</encoding>
  7.   </configuration>
  8. </plugin>

编译依赖ojdbc,但是mvn中该jar包已经挂了,需要删除根目录及tbdatasource、tddl-atom-datasource子目录下pom.xml中的ojdbc配置

	<dependency>
		<groupId>com.oracle</groupId>
		<artifactId>ojdbc14</artifactId>
		<version>10.2.0.3.0</version>
		<scope>provided</scope>
	   </dependency>
删除根目录以及下述目录(tddl-interact)下pom.xml文件中的一个插件内容(artifactId为maven-surefire-plugin的插件,该插件用作单元测试,因此我们可以不需要该插件,如果可以自己查看相关单元测试的类,然后引入到自己的项目中进行测试)。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.3</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
tddl默认用的是spring2.5.6,跟所用spring3的项目结合十会产生冲突,如果您的项目是spring3的话,请修改依赖引入spring3。

 <dependency>
            <groupId>org.springframework</groupId>
             <artifactId>spring-jdbc</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>

3. 依赖包的安装:
tddl-common模块包中的类中会调用diamond项目的类,需要将diamond-client*.jar和diamond-utils*.jar安装入mvn本地库:请在用户目录下放入Diamond-utils和Diamond-client的jar包,然后运行命令,path根据自己库的位置进行替换,如果还不行,自行把jar包放入相应的本地库中。

  1. mvn install:install-file -DgroupId=com.taobao.diamond -DartifactId=diamond-client -Dversion=2.0.5.3.taocode-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file

4. 编译
使用命令行到trunk跟目录使用mvn clean package -Dmaven.test.skip编译后,得到如下结果(不建议用eclipse进行编译):
[INFO] taobao distributed data layer v3.0.1.5.taobaocode-SNAPSHOT SUCCESS [2.253s]
[INFO] tddl-interact v3.0.1.5.taobaocode-SNAPSHOT ………… SUCCESS [3.319s]
[INFO] tbdatasource v3.0.1.5.taobaocode-SNAPSHOT …………. SUCCESS [5.939s]
[INFO] tddl-common v3.0.1.5.taobaocode-SNAPSHOT ………….. SUCCESS [4.532s]
[INFO] tddl-atom-datasource v3.0.1.5.taobaocode-SNAPSHOT ….. SUCCESS [4.313s]
[INFO] tddl-group-datasource v3.0.1.5.taobaocode-SNAPSHOT …. SUCCESS [3.627s]
[INFO] tddl-sample v3.0.1.5.taobaocode-SNAPSHOT ………….. SUCCESS [1.040s]
之后,将tddl导入eclipse,如图所示

注:tddl使用的jdk为1.6, 如果你的jdk为1.7或1.8项目会报错,此时不要慌,点开错误的类添加未实现的方法并实现即可。

tddl使用例子

在使用tddl之前请明确你要使用的数据库,两者创建数据库不管是sql还是方式是完全不同的(mysql相对简单),本示例中tddl使用mysql,oracle请把tddl-atom-datasource项目中的TAtomConstants类中的DEFAULT_ORACLE_CON_TYPE改为 thin模式(默认为oci),把TAtomConURLTools中的连接代码方法

public static String getOracleConURL(String ip, String port, String sid, String conType) {
		String conUrl = null;
		if (checkPrams(ip, port, sid)) {
			if (TStringUtil.isBlank(conType)
					&& TAtomConstants.DEFAULT_ORACLE_CON_TYPE.equals(conType.toLowerCase().trim())) {
				conUrl = ORACLE_URL_OCI_FORMAT.format(new String[] { ip, port, sid });
			} else {
				conUrl = ORACLE_URL_THIN_FORMAT.format(new String[] { ip, port, sid });
			}
		}
		return conUrl;
	}

 TAtomDataSource例子

1. 设置数据库

  1. drop database if exists qatest_normal_0;
  2. CREATE DATABASE `qatest_normal_0`
  3. CREATE USER ’tddl’@'%’ IDENTIFIED BY ’tddl’;
  4. GRANT ALL ON qatest_normal_0.* TO ’tddl’@'%’;
  5. CREATE TABLE `normaltbl_0001` (
  6.   `pk` int(11) NOT NULL,
  7.   `id` int(11) DEFAULT NULL,
  8.   `gmt_create` date DEFAULT '2010-12-17',
  9.   `name` varchar(30) DEFAULT NULL,
  10.   `floatCol` float(9,3) DEFAULT '0.000',
  11.   PRIMARY KEY (`pk`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=GBK

上表中创建了一个数据库qatest_normal_0并且创建表normaltbl_0001用于存放数据。
2. 配置数据源
将上一步的数据源配置到diamond中,需要加入Global,App和User三种配置
a) Global配置:配置数据源地址 格式:com.taobao.tddl.atom.globe.
dbkey

  1. dataId:com.taobao.tddl.atom.global.qatest_normal_0
  2. group:DEFAULT_GROUP
  3. content:
  4. ip=127.0.0.1
  5. port=3306
  6. dbName=qatest_normal_0
  7. dbType=mysql
  8. dbStatus=RW

b) App配置:配置连接池 格式:com.taobao.tddl.atom.app.appname.dbkey

  1. dataId:com.taobao.tddl.atom.app.tddl_sample.qatest_normal_0
  2. group:DEFAULT_GROUP
  3. content:
  4. userName=tddl
  5. minPoolSize=1
  6. maxPoolSize=2
  7. idleTimeout=10
  8. blockingTimeout=5
  9. preparedStatementCacheSize=15
  10. connectionProperties=characterEncoding=gbk

c) User配置:配置访问密码 格式:com.taobao.tddl.atom.passwd.dbKey.数据库类型.用户名

  1. dataId:com.taobao.tddl.atom.passwd.qatest_normal_0.mysql.tddl
  2. group:DEFAULT_GROUP
  3. content:
  4. encPasswd=5a826c8121945c969bf9844437e00e28

注意此处的encPasswd为密码(tddl)的密文,使用JbossPasswordDecode来加密,加密类为SecureIdentityLoginModule,如图所示,运行即可算出密文,也能转换出原文


3. 代码
由于需要连接diamond获取信息,因此在测试机上需要配置a.b.c域名,配置详情请看TDDL+DIAMOND的配置及使用(二)
测试代码在tddl-sample项目中,运行依赖commons-codec 1.3和commons-httpclient 3.1  ojdbc6,请自行在maven中进行配置,运行AtomSample进行单元测试,如图表示成功:

仔细看console日志,发现已经正确连接到了diamond-server中

运行代码,可以发现数据库中已经插入了新的数据。

注:如果出现了错误请检查BaseSampleCase类中的 appName dbkey group_key是否正确


TGroupDataSource
TGroupDataSource用于集群管理,数据源创建一个镜像数据源形成互备(注意:TDDL不负责数据源之间的数据同步,数据同步需要管理员处理);然后在这两个数据源之间进行访问切换。两个数据源可以在不同的机器上,示例中使用同一台机器。
1. 设置数据库

  1. drop database if exists qatest_normal_0_bak;
  2. CREATE DATABASE `qatest_normal_0_bak`
  3. CREATE USER ’tddl’@'%’ IDENTIFIED BY ’tddl’;
  4. GRANT ALL ON qatest_normal_0_bak.* TO ’tddl’@'%’;
  5. CREATE TABLE `normaltbl_0001` (
  6.   `pk` int(11) NOT NULL,
  7.   `id` int(11) DEFAULT NULL,
  8.   `gmt_create` date DEFAULT '2010-12-17',
  9.   `name` varchar(30) DEFAULT NULL,
  10.   `floatCol` float(9,3) DEFAULT '0.000',
  11.   PRIMARY KEY (`pk`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=GBK

上图中创建了qatest_normal_0_bak库,设置同qatest_normal_0
2. 配置数据源
在上面同已经配置了qatest_normal_0的数据源,下面只需要配置集群信息和qatest_normal_0_bak信息即可。
a) qatest_normal_0_bak的Global配置:配置数据源地址

  1. dataId:com.taobao.tddl.atom.global.qatest_normal_0_bak
  2. group:DEFAULT_GROUP
  3. content:
  4. ip=127.0.0.1
  5. port=3306
  6. dbName=qatest_normal_0_bak
  7. dbType=mysql
  8. dbStatus=RW

b) qatest_normal_0_bak的App配置:配置连接池

  1. dataId:com.taobao.tddl.atom.app.tddl_sample.qatest_normal_0_bak
  2. group:DEFAULT_GROUP
  3. content:
  4. userName=tddl
  5. minPoolSize=1
  6. maxPoolSize=2
  7. idleTimeout=10
  8. blockingTimeout=5
  9. preparedStatementCacheSize=15
  10. connectionProperties=characterEncoding=gbk

c) qatest_normal_0_bak的User配置:配置访问密码

  1. dataId:com.taobao.tddl.atom.passwd.qatest_normal_0_bak.mysql.tddl
  2. group:DEFAULT_GROUP
  3. content:
  4. encPasswd=5a826c8121945c969bf9844437e00e28

d) 集群信息:两个数据源的访问配置 格式  com.taobao.tddl.jdbc.group_V2.4.1_groupName

  1. dataId:com.taobao.tddl.jdbc.group_V2.4.1_group_sample
  2. group:DEFAULT_GROUP
  3. content:
  4. qatest_normal_0:r10w10,qatest_normal_0_bak:r10w0

这里的content设置了两个数据源的读写权重,qatest_normal_0为读写(r10w10),qatest_normal_0_bak为只读不写(r10w0),r/w后的数字代表权重。
对于任何一个数据源,权重配置模式为(具体可见com.taobao.tddl.jdbc.group.config。Wight.java):[r|R](\\d*) [w|W](\\d*) [p|P](\\d*) [q|Q](\\d*) [i|I](\\d*)
字母r或R表示可以对数据库进行读操作, 后面跟一个数字表示读操作的权重,如果字母r或R后面没有数字,则默认是10;
字母w或W表示可以对数据库进行写操作, 后面跟一个数字表示写操作的权重,如果字母w或W后面没有数字,则默认是10;
字母p或P表示读操作的优先级, 数字越大优先级越高,读操作优先从优先级最高的数据库中读数据, * 如果字母p或P后面没有数字,则默认优先级是0;
字母q或Q表示写操作的优先级, 数字越大优先级越高,写操作优先从优先级最高的数据库中写数据,如果字母q或Q后面没有数字,则默认优先级是0.
字母i或I表示动态DBIndex, 和用户通过threadLocal指定的dbIndex结合,实现rw之上更灵活的路由:一个db可以同时配置多个i;不同的db可以配置相同的i,例如 db0:i0i2,db1:i1,db2:i1,db3:i2则
*用户指定dbIndex=0,路由到db0;(只有db0有i0)
*用户指定dbIndex=1,随机路由到db1和db2;(db1和db2都有i1)
*用户指定dbIndex=2,随机路由到db0和db3;(db0和db3都有i2)
3. 测试代码 更改测试类继承的类为GroupSampleCase即可,修改具体代码进行测试

TDDL配置方法(数据源bean,分库分表,sequence)

数据源bean,ibatis核心beans,spring事务bean 配置项说明 cuntaosccDataSource:分库分表数据源,appName数据库代号从dba获得,appRul...
  • eric0095
  • eric0095
  • 2015年10月08日 19:05
  • 3370

TDDL+DIAMOND的配置及使用(一):基本介绍

说明 因项目需求要调研一下TDDL,在调研中发现相关的资料较少,而且淘宝的社区支持做的无比的烂,TaoCode开源社区上面,几乎从来都是有人提问,无人响应,且网上相关的TDDL资料较少且巨坑无比,因...
  • pkpk20044
  • pkpk20044
  • 2015年11月18日 15:51
  • 1725

TDDL+DIAMOND的配置及使用(二):Diamond

1.下载对应diamond代码 Diamond的SVN代码库地址为:http://code.taobao.org/svn/diamond/trunk;最新版本是r20,但与TDDL匹配的版本是r16,...
  • pkpk20044
  • pkpk20044
  • 2015年11月18日 17:04
  • 1481

[文档] TDDL和Diamond的使用(一):基本介绍

一,说明   因项目需求要调研一下TDDL,在调研中发现相关的资料较少,因此记之。   本文描述Diamond和TDDL中间件的部署和使用。   Diamond是淘宝开源的配置管理系...
  • a137268431
  • a137268431
  • 2016年04月27日 16:35
  • 714

TDDL:来自淘宝的分布式数据层

淘宝根据自身业务需求研发了TDDL(Taobao Distributed Data Layer)框架,主要用于解决分库分表场景下的访问路由(持久层与数据访问层的配合)以及异构数据库之间的数据同步,它是...
  • diu_brother
  • diu_brother
  • 2016年06月01日 11:17
  • 6607

分布式数据中间件TDDL、Amoeba、Cobar、MyCAT架构比较

框架比较 TDDL Amoeba Cobar MyCat 点评 TDDL不同于其它几款产品,并非独立的中间件,只能算作中间层,是以Jar包方式提供给应用调用。属于JDBC...
  • kobejayandy
  • kobejayandy
  • 2017年03月08日 11:40
  • 3394

TDDL使用

1.创建数据源           由DBA来做。            一般数据源有3层:           (1)Matrix                      分库分表,数据路...
  • cpf2016
  • cpf2016
  • 2015年05月18日 14:24
  • 3045

阿里巴巴TDDL

阿里巴巴 TDDL Diamond
  • Sunyc1990
  • Sunyc1990
  • 2017年03月01日 10:56
  • 475

TDDL-剖析淘宝TDDL

原文:http://www.tuicool.com/articles/nmeuu2  前言 在开始讲解淘宝的 TDDL(Taobao Distribute Data Layer...
  • lan861698789
  • lan861698789
  • 2015年07月17日 18:27
  • 2884

TDDL使用

1.创建数据源           由DBA来做。            一般数据源有3层:           (1)Matrix                      ...
  • a137268431
  • a137268431
  • 2016年12月12日 16:43
  • 609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TDDL+DIAMOND的配置及使用(三):TDDL
举报原因:
原因补充:

(最多只允许输入30个字)