多库数据源配置

1. 机器1是主机,机器4是备机

application-context.xml<bean class="com.caland.sun.client.datasources.DataSourceDescriptor">
  <property name="identity" value="partition1"/>                  //   <property name="targetDataSource" ref="dataSource1"/>           // 1. 指定要访问的数据源  <property name="targetDetectorDataSource" ref="dataSource1"/>   // 2. 指定访问的数据源是否正常运转  心跳检查  <property name="standbyDataSource" ref="dataSource4"/>          // 3. 同组备机的数据源  <property name="standbyDetectorDataSource" ref="dataSource4"/> // 4. 心跳检查同组备机是否正常运转的</bean>

2. 路由规则

application-context.xml配置路由规则<bean id="hashFunction" class="com.caland.core.dao.router.HashFunction"/><bean id="internalRouter" class="com.caland.sun.client.router.config.InternalRouterXmlFactoryBean">  <property name="functionsMap">    <Map>      <entry key="hash" value-ref="hashFunction"></entry>    <Map>  </property>  <property name="configLocations">    <list>      <value>classpath:/dbRule/sharding-rules-on-namespace.xml</value>    </list>  </property></bean>

sharding-rules-on-namespace.xml<rule>  <namespace>User</namespace>  <!--表达式如果不使用自定义路由规则函数,而是直接使用taobaoId%2==0 这种的话就不用在文件中配置<property name="functionsMap">中了 -->  <shardingExpression>hash.applyUser(username)==1</shardingExpression>   //Hash算法,用户名,如果等于1    --->datasource中  partition1  <shards>partition1</shards></rule>

3.

  HashFunction/**
     * 对三个数据库进行散列分布
     * 1. 返回其他值,没有在配置文件中配置的,如负数等,在默认数据库中查找
     * 2. 比如现在配置文件中配置有三个结果进行散列,如果返回0,那么apply方法只调用一次,如果返回为2
     *    那么apply方法就会调用三次,也就是每次是按照配置文件中的顺序依稀调用方法进行判断结果,而不会缓存方法返回只进行判断
     * @param username
     * @return
     */
    public int applyUser(String username){
        // 先从缓存中获取  没有则查询数据
        // input 可能是id,拿id到缓存里去查用户的DB坐标信息,然后把
        int result = Math.abs(username.hashCode()%1024);// 0-1023
        System.out.println("hash:"+result);
        if(0<=result&&result<256){
            result=1;
            System.out.println("在第一个数据库中");
        }
        if(256<=result&&result<512){
            result = 2;
            System.out.println("在第二个数据库中");
        }
        if(512<=result&&result<1024){
            result=3;
            System.out.println("在第三个数据库中");
        }
        return result;
    }

  

时间: 2024-08-03 15:23:15

多库数据源配置的相关文章

spring+mybatis最简多数据源配置

作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权所有,欢迎保留原文链接进行转载:) 说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务.我们项目是后者的模式,网上找了很多,大都是根据jpa来做多数据源解决方案,要不就是老的spring多数据源解决方案,还有的是利用aop动态切换,感觉有点小复杂,其实我只是想找一个简单的多数据支持而已,折腾了两个小时整理出来,供大家参考. 废话不多说直接上代码吧 配置文件 pom包就不贴了比较简

spring多数据源配置方式

1.单数据源配置方式 <bean name="zhyDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver&q

MyBatis多数据源配置(读写分离)

MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用起来可能会很麻烦. 实际应用中可能存在多种结合的情况,你可以理解本文的含义,不要死板的使用. 多数据源的可能情况 1.主从 通常是MySql一主多从的情况,本文的例子就是主从的情况,但是只有两个数据源,所以采用直接配置不会太麻烦,但是不利于后续扩展,主要是作为一个例子来说明,实际操作请慎重考虑. 针对这种情况,一个更好的解决方法可以参考(本人没有实际尝试过): http://blog.csdn.net/lixi

JBOSS 数据源配置并使用JNDI调用

场景分析: 某天系统的数据库维护方要求进行DG备库容灾演练,要把生产用RAC库模拟宕机并转移至DG备库上,由于是failover而不是switchover演练,于是期间不对外开放apache访问,要求服务启动时间较紧. 数据库的切换导致IP的变更,这样导致ap上正在跑的系统不得不重新配置数据库连接,基于目前的机制需要执行以下步骤: a).停止服务群组 b).移除服务包 c).源服务包替换配置文件(这样还要求服务包的当前版本备份完好) d).重新上传服务包 e).分发至群组,最后启动群组 f).当

Springboot多数据源配置

目前,业界流行的数据操作框架是 Mybatis,那 Druid 是什么呢? Druid 是 Java 的数据库连接池组件.Druid 能够提供强大的监控和扩展功能.比如可以监控 SQL ,在监控业务可以查询慢查询 SQL 列表等.Druid 核心主要包括三部分: 1. DruidDriver 代理 Driver,能够提供基于 Filter-Chain 模式的插件体系. 2. DruidDataSource 高效可管理的数据库连接池 3. SQLParser 当业务数据量达到了一定程度,DBA 需

MyBatis动态数据源配置

1.通过spirngboot构建项目主要依赖 mybatis+mysql+aspect <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><dependency>&l

Spring Boot Jpa多数据源配置

前言随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源,如:user一个库,business一个库.那么接下来我们就要考虑怎么去在spring boot中实现多个数据源的配置. ××× 实现建表首先是建表语句,我们要建立两个数据库,并各库内新建一张表user表mysql> use user:mysql> select * from user;+----+-------+----------+| id | name | password |+----+----

SpringBoot2.0之八 多数据源配置

 在开发的过程中我们可能都会遇到对接公司其他系统等需求,对于外部的系统可以采用接口对接的方式,对于一个公司开发的两个系统,并且知道相关数据库结构的情况下,就可以考虑使用多数据源来解决这个问题.SpringBoot为我们提供了相对简单的实现. 一.建立如下结构的maven项目 二.添加相关数据库配置信息 server: port: 8080 spring: datasource: master: driver-class-name: com.mysql.jdbc.Driver url: jdbc:

阿里云配置中心nacos单机使用MySQl作为数据源配置方法

Nacos数据持久化: 修改Nacos的数据持久化配置为MySQL存储.默认情况下,Nacos使用嵌入式数据库CMDB实现数据的存储.所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的.为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只要支持MySQL的存储配置Nacos的MySQL存储只需要下面三步: 第一步:安装数据库,版本要求:5.6.5+ (我在centos7.4使用yum安装了mysql-5.7) 第二步:初始化MySQL数据库,数据库初始