koala 多数据源动态切换

koala

特点:多数据源动态切换,数据源分组和负载均衡(轮询)

项目源码以及demo:https://github.com/zeq9069/koala

请大家关注一下哦!!哈哈!

  最近,在开发项目的时候后,要用到多个数据源的动态切换,于是就开发了koala
这个小小得框架,koala支持多数据源的切换,数据源的分组和负载均衡(轮询)!
  只需要将jar引入到你自己的项目中之后,然后进行简单配置就可以使用了!!使用起来
非常方便,该项目提供了三个核心的注解@ChangeTo,@DataSourceDistribute,
@DataSourceGroup.
 我们在下面详细的讲解一下怎么使用。

1. @ChangeTo

   该注解是用在你的service层的实现类的方法上的,意思就是改变数据源为指定的数据源,
 例如:@ChangeTo(value="slave"),将数据源切换到数据源slave。如果不设置value的话,
 意思就是使用默认的数据源。

[email protected]

    该注解使用在service层的实现类的类上,我叫它"数据源派遣",哈哈!什么意思呢?
  就是将指定的数据源分配到对应的方法上。
  例如:
 @DataSourceDistribute(value={
   @DataSourceEntity(dataSource="slave",methodPattern="get*|delete*")  })  
  这个注解有点长,我们来分析一下。
    首先,@DataSourceDistribute这个注解是主体,它有一个数组形式的参数value,
这个数组里放的是好多个子注解@DataSourceEntity,每一个子注解中都有两个参数
dataSource和methodPattern,dataSource对应数据源,methodPattern对应一些方法名
的正则表达式。
    这样你就明白了吧?这个例子的意思就是将数据源slave分配到跟以get或者delete开头
的方法上!!!当然你可以设置多个@DataSourceEntity,这里只设置了一个!!这样就不用
再每一个方法上手动设置数据源了,省了不少事!!

[email protected]

    这个注解也是用在service层的实现类上,它更上一个注解不同,上一个注解只能将一个
dataSource对应到多个方法上,而@DataSourceGroup的目的就是一个或多个方法对应到
一个dataSource组,也就是多个dataSource!!!这一个数据源组中的数据源是轮询执行的,
这样就起到了负载均衡的效果!!
例如:
    @DataSourceGroup(groups={
      @Group(groupName="master-group",methodPattern="get*|delete*")
     })  
  呵呵!!是不是跟上一个注解很类似啊!!
  我们详细解释一下,首先@DataSourceGroup有个数组形式的参数groups,里卖弄存放的是一
些子注解@Group,@Group中又有两个参数groupName和methodPattern,分别对应数据源组
名和方法名的正则表达式。(怎么配置数据源和数据源组名呢??详细请看项目的使用文档
https://github.com/zeq9069/koala)
  上面的例子意思就是将以get或delete开头的方法对应到数据源组master-group上,这样当
方法执行时,就可以去轮询master-group组中的数据源了,而且数据源被访问到机会是均等的。
这样既起到了负载均衡的效果又简化了配置。

以上的核心内容就完了!

去看看项目源码吧,有详细的配置和注意事项说明。

有什么不懂得发邮件到 [email protected]

时间: 2024-10-13 11:59:32

koala 多数据源动态切换的相关文章

基于Struts2 Spring ibatis Oracle10g架构 多数据源动态切换实例

一.概述 基于Spring动态配置多数据源,在大型的应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效的提高系统的水平伸缩性,而这样的解决方案就会补同于常见的单一数据实例的方案,这就要程序在运行时根据当时的请求以及系统状态来动态的决定将数据存储在哪个数据库实例中,以及从哪个数据库提取数据. Spring配置多个数据源的方式和具体使用过程,Spring对于多数据源,以数据库表为参照,大体上可以分为两大类情况: 1.表级上的跨数据库,即对于不同的数据库却有不相同的表(表名和表结构完全

Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法(转)

一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基本上没有什么问题,但唯一可能出现问题的就是在hibernate做添加操作生成主键策略的时候.因为我们都知道hibernate的数据库本地方言会针对不同的数据库采用不同的主键生成策略. 所以针对这一问题不得不采用自定义的主键生成策略,自己写一个主键生成器的表来维护主键生成方式或以及使用其他的方式来生成

基于spring的aop实现多数据源动态切换

https://lanjingling.github.io/2016/02/15/spring-aop-dynamicdatasource/ 基于spring的aop实现多数据源动态切换 发表于 2016-02-15   |   分类于 spring  | 一.多数据源动态切换原理 项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此:又例如:读写分离数据库配置的系统. 1.多数据源设置: 1)静态数据源切换:一般情况下,我们可以配置多个数据源,然后为每个数据源写一套对应的

spring 数据源动态切换 与dubbo服务

1:问题描述 项目用了spring数据源动态切换,服务用的是dubbo.在运行一段时间后程序异常,更新操作没有切换到主库上.这个问题在先调用读操作后再调用写操作会出现.经分析原因有3: 第一:当程序运行一段时间后调用duboo服务时,读操作与写操作有可能会在一个线程里,当这种情况出现时 2:数据源配置 <idclass>    <name>       <key-type>          <keyvalue-ref/>          <keyv

springboot多数据源动态切换和自定义mybatis件分页插

1.配置多数据源 增加druid依赖 完整pom文件 数据源配置文件 route.datasource.driver-class-name= com.mysql.jdbc.Driver route.datasource.url= jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 route.datasource.username= root route.datasource.password= 1234

springAOP实现基于注解的数据源动态切换

需求 代码实现读写数据库分离 武器 spring3.0以上版本 实现思路 1.继承org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource,自定义数据源路由. 2.实现数据源类型管理工具,诸如DBContextHolder,包含设置和读取当前数据源配置. 3.实现数据源切换的AOP. 4.自定义只读注解,诸如@ReadOnlyKey. 5.配置transactionManager,实现aop. 代码示例 1.自定义的

spring+mybatis多数据源动态切换

spring mvc+mybatis+多数据源切换 选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web.xml <context-param> <param-name>webAppRootKey</param-name> <param-value>trac</param-value> </context-param> <!-- Spr

基于Spring+Mybatis的多数据源动态切换

Spring单数据源直接在<bean id="dataSource">下配置数据源的各种连接参数.但动态数据源需要配置个各个数据源例如ds1.ds2等.然后在dataSource中动态根据传递过来的参数动态调用不同的数据源. 1.当进行访问时,首先通过DbContextHolder.setDbType("ds1");设置需要使用的数据源.DbContextHolder就是一个用来存储数据源信息的类,其中通过ThreadLocal来记录数据源信息. 2.D

springboot添加多数据源 以及 动态添加数据源动态切换数据源

<!-- Druid 数据连接池依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency> //指定使用Druid做数据源spring.datasource.type=com.alibaba.druid.pool.Dru