TDDL动态数据源开源-示例使用说明

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

TDDL动态数据源使用示例说明

环境准备

  1. 因为tddl动态数据源强依赖diamond配置中心,该依赖项目已经开源.请到http://code.taobao.org/p/diamond/src/ checkout 代码,下载使用文档(http://code.taobao.org/p/diamond/wiki/index/)按步骤部署.
  2. Jdk 1.6 安装.
  3. Mysql 5.1.x或者5.5.x 安装
  4. Maven2  settings.xml修改(见附录)

示例使用

Tddl 动态数据源的开源代码中,有一个tddl-sample 工程, 该工程演示了如何使用tddl动态数据源.但需要一些配置支持,以下说明需要做的配置.

AtomDataSource示例使用说明

1.    创建mysql库和表

(1).建库qatest_normal_0:

drop database if exists qatest_normal_0;

CREATE DATABASE `qatest_normal_0`

(2). 在库qatest_normal_0中建表normaltbl_0001

USE qatest_normal_0;

CREATE TABLE `normaltbl_0001` (

`pk` int(11) 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',

PRIMARY KEY (`pk`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

(3). 在库qatest_normal_0中创建tddl用户,授予读写数据库权限

CREATE USER 'tddl'@'%' IDENTIFIED BY 'tddl';

GRANT Insert,Update,Select,Delete ON qatest_normal_0.* TO 'tddl'@'%';

2.    在diamond中配置Atom数据源

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加密下明文密码)

3. 添加TDDL依赖(建议使用maven,settings.xml文件绑定淘宝开源maven库,见附录)

<dependency>

<groupId>com.taobao.tddl</groupId>

<artifactId>tddl-group-datasource</artifactId>

<version>3.0.1.5.taobaocode-SNAPSHOT</version>

</dependency>

<dependency>

<groupId>com.taobao.tddl</groupId>

<artifactId>tddl-atom-datasource</artifactId>

<version>3.0.1.5.taobaocode-SNAPSHOT</version>

</dependency>

4.    在代码中调用AtomDataSource

TAtomDataSource tAtomDataSource = new TAtomDataSource();
tAtomDataSource.setAppName(appName);//appName是当前业务的名称
tAtomDataSource.setDbKey(dbKey);// dbKey是dba告知业务的当前数据库实例的名字(用于标志唯一的数据库)
TAtomDataSource.init();

GroupDataSource示例使用说明

1.    在mysql数据库中创建库和表(如果atom ds示例中已经创建的库表,则不需要再创建)

(1) 建库qatest_normal_0

drop database if exists qatest_normal_0;

CREATE DATABASE `qatest_normal_0`

(2) 在库qatest_normal_0中建表normaltbl_0001

USE qatest_normal_0;

CREATE TABLE `normaltbl_0001` (

`pk` int(11) 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',

PRIMARY KEY (`pk`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

(3) 建库qatest_normal_0_bac

drop database if exists qatest_normal_0_bac;

CREATE DATABASE `qatest_normal_0_bac`;

(4) 在库qatest_normal_0_bac中建表normaltbl_0001

USE qatest_normal_0_bac;

CREATE TABLE `normaltbl_0001` (

`pk` int(11) 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',

PRIMARY KEY (`pk`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

(5). 在以上两个数据库中创建tddl用户,授予读写数据库权限

CREATE USER 'tddl'@'%' IDENTIFIED BY 'tddl';

GRANT Insert,Update,Select,Delete ON qatest_normal_0.* TO 'tddl'@'%';

GRANT Insert,Update,Select,Delete ON qatest_normal_0_bac.* TO 'tddl'@'%';

2.    在diamond中配置Group数据源

(1)在diamond中配置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

(2)在diamond中配置Atom(qatest_normal_0)数据源

 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加密下明文密码)

(3)在diamond中配置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加密下明文密码)

3.    添加TDDL依赖

<dependency>

<groupId>com.taobao.tddl</groupId>

<artifactId>tddl-group-datasource</artifactId>

<version>3.0.1.5.taobaocode-SNAPSHOT</version>

</dependency>

<dependency>

<groupId>com.taobao.tddl</groupId>

<artifactId>tddl-atom-datasource</artifactId>

<version>3.0.1.5.taobaocode-SNAPSHOT</version>

</dependency>

4.    在代码中调用Group DataSource

TGroupDataSource ds = new TGroupDataSource(dbGroupKey, appName);
ds.init();

附录

请修改MAVEN/conf/settings.xml文件,确保使用正确的Maven Repository。

目前我们将Tddl动态数据源发布在淘蝌蚪的maven repository中。

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://maven.apache.org/SETTINGS/1.0.0

http://maven.apache.org/xsd/settings-1.0.0.xsd">

……

<servers>

<server>

<id>taocodeReleases</id>

<username>admin</username>

<password>admintaocode321</password>

</server>

<server>

<id>taocodeSnapshots</id>

<username>admin</username>

<password>admintaocode321</password>

</server>

</servers>

<profiles>

……

<profile>

<id>opensource</id>

<repositories>

<repository>

<id>taocodeReleases</id>

<name>taocode nexus</name>

<url>http://mvnrepo.code.taobao.org/nexus/content/repositories/releases/</url>

</repository>

<repository>

<id>taocodeSnapshots</id>

<name>taocode nexus</name>

<url>http://mvnrepo.code.taobao.org/nexus/content/repositories/snapshots/</url>

</repository>

</repositories>

</profile>

</profiles>

……

<activeProfiles>

<activeProfile>opensource</activeProfile>

</activeProfiles>

</settings>

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
uml
状态机
首先需要考虑涉及到哪些状态节点和哪些事件,如何方便状态节点的获取、状态节点如何串联起来呢?串联的方式下,如何拿到下一个状态节点?如果基于角色,如何实现? 我们知道工作流可以实现基于角色进行流程的流转,但是此时我们涉及到事件和状态,会出现多个分支,如果使用工作流实现,流程处理上,比如activiti上,可能比较复杂,因此考虑比较轻量级的状态机来实现的话,相对来说要方便一些。
1357 0
状态机
|
关系型数据库 Java MySQL
|
存储 Linux
linux查看系统版本、内核信息、操作系统类型版本
linux查看系统版本、内核信息、操作系统类型版本
673 9
|
存储 运维 Dubbo
HSF:阿里RPC框架
HSF:阿里RPC框架
3392 0
|
存储 关系型数据库 MySQL
深入OceanBase内部机制:高性能分布式(实时HTAP)关系数据库概述
深入OceanBase内部机制:高性能分布式(实时HTAP)关系数据库概述
|
安全 应用服务中间件 测试技术
如何在 Nginx 中启用 HSTS?
如何在 Nginx 中启用 HSTS?
757 1
如何在 Nginx 中启用 HSTS?
|
SQL 关系型数据库 API
Star 4.7k!高效SQL Parser!纯Python开发!自称目前最快的纯Python SQL解析器!
Star 4.7k!高效SQL Parser!纯Python开发!自称目前最快的纯Python SQL解析器!
415 1
|
数据采集 分布式计算 调度
DataX教程(03)- 源码解读(超详细版)
DataX教程(03)- 源码解读(超详细版)
1305 0
|
固态存储 架构师 开发工具
|
JSON 架构师 前端开发
REST API 设计最佳实践:如何正确使用 HTTP 状态码?
本文分享在设计 REST API 时的最佳实践。关于设计优秀REST API 的一些建议、提示和指导,帮助您让消费者(以及开发人员)满意。 我们都应该努力使API变得易于使用。无论是对于消费者,还是我们自己的开发人员同伴。希望这篇文章能帮助你学到一些技巧,并激发出构建更好REST API的方法。
1245 0
REST API 设计最佳实践:如何正确使用 HTTP 状态码?