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

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>

时间: 2024-12-23 21:35:06

TDDL动态数据源开源-示例使用说明的相关文章

Spring实现动态数据源,支持动态添加、删除和设置权重及读写分离

当项目慢慢变大,访问量也慢慢变大的时候,就难免的要使用多个数据源和设置读写分离了. 在开题之前先说明下,因为项目多是使用Spring,因此以下说到某些操作可能会依赖于Spring. 在我经历过的项目中,见过比较多的读写分离处理方式,主要分为两步: 1.对于开发人员,要求serivce类的方法名必须遵守规范,读操作以query.get等开头,写操作以update.delete开头. 2.配置一个拦截器,依据方法名判断是读操作还是写操作,设置相应的数据源. 以上做法能实现最简单的读写分离,但相应的也

AbstractRoutingDataSource实现动态数据源切换 专题

  需求:系统中要实现切换数据库(业务数据库和his数据库) 网上很多资料上有提到AbstractRoutingDataSource,大致是这么说的 在Spring 2.0.1中引入了AbstractRoutingDataSource, 该类充当了DataSource的路由中介, 能有在运行时, 根据某种key值来动态切换到真正的DataSource上.      Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样

spring中设置动态数据源

Spring 可以设置动态数据源,这样可以对程序来透明的支持切 换操作不同的数据库. http://oiote.blog.sohu.com/74596942.html 这篇文章写得非 常不错.测试通过,并准备在项目中使用这个方法.还有几个问题 希望大家给点意见: 首先说一下我的需求:数据库结构都是一样,但具体有多少个 数据库不确定(视具体用户而定),用户操作那个数据库要根据登 录的时候进行选择,或根据用户的权限而定.这个信息肯定是保存 在用户的登录信息中(例如:session) 问题1.当有不同

viewstate和datatable动态录入数据示例

 这篇文章主要介绍了viewstate和datatable动态录入数据示例,需要的朋友可以参考下    代码如下: <%@ Page Language="C#" EnableViewState="true" %> <%@ Import Namespace="System.Data" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E

Spring Boot 动态数据源(Spring 注解数据源)

本文实现案例场景: 某系统除了需要从自己的主要数据库上读取和管理数据外,还有一部分业务涉及到其他多个数据库,要求可以在任何方法上可以灵活指定具体要操作的数据库. 为了在开发中以最简单的方法使用,本文基于注解和AOP的方法实现,在spring boot框架的项目中,添加本文实现的代码类后,只需要配置好数据源就可以直接通过注解使用,简单方便. 一配置二使用1. 启动类注册动态数据源2. 配置文件中配置多个数据源3. 在需要的方法上使用注解指定数据源 1.在启动类添加 @Import({Dynamic

通用JdbcDao更新,增加动态数据源,支持权重和读写分离

版本:V1.2.3 本次更新增加了动态数据源的支持,可以十分方便的在配置文件中将原来的单数据源修改成动态数据源,而无须修改任何的业务代码. 下面来看看如何使用动态数据源,关于动态数据源的实现,请看这里:Spring实现动态数据源,支持动态添加.删除和设置权重及读写分离 第一步 当然是在spring中声明数据源bean了 <bean id="dynamicDataSource" class="com.dexcoder.assistant.persistence.Dynam

spring hibernate 动态数据源 同步所有库的表结构问题

问题描述 spring hibernate 动态数据源 同步所有库的表结构问题 采取spring + hibernate 组成动态多数据源(每个库的表结构相同). 现程序升级需要对数据库表结构进行更改,将hibernate 的hibernate.hbm2ddl.auto 配置为update,结果只能修改defaultTargetDataSource 所连接的一个库. 求有可以使hibernate.hbm2ddl.auto 自动更新所有的库解决方案. 补充:是一个sessionFactory(or

@Transactional导致AbstractRoutingDataSource动态数据源无法切换的解决办法

上午花了大半天排查一个多数据源主从切换的问题,记录一下: 背景: 项目的数据库采用了读写分离多数据源,采用AOP进行拦截,利用ThreadLocal及AbstractRoutingDataSource进行数据源切换,数据源代码如下: public class RoutingDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DB

c++动态内存空间示例(自定义空间类型大小和空间长度)_C 语言

动态内存空间的申请示范 利用C++的特性,能够自定义空间的类型大小和空间长度 下面这个程序是个数组动态配置的简单示例 复制代码 代码如下: #include <iostream>using namespace std; int main(){   int size = 0;     cout << "请输入数组长度:";  //能够自定义的动态申请空间长度    cin >> size;    int *arr_Point = new int[siz