SSH配置动态数据源

用到一个项目,需要整合2个不同的数据库!

现将代码贴下,以备后用:

1、创建静态映射类,该类映射动态数据源

public class DataSourceMap {
     public static final String Analyse="Analyse";
     public static final String DLmarket= "DLmarket";
} 

2、创建数据库连接配置容器类

public class DataSourceContextHolder {
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();  

    public static void setCustomerType(String customerType){
        contextHolder.set(customerType);
    }  

    public static String getCustomerType() {
        return contextHolder.get();
    }  

    public static void clearCustomerType() {
        contextHolder.remove();
    }  

}  

3、创建动态数据源切换类

public class DynamicDataSource extends AbstractRoutingDataSource{  

    @Override
    protected Object determineCurrentLookupKey() {
        // TODO Auto-generated method stub
        String customerType="";
        if(DataSourceContextHolder.getCustomerType()!=null){
            customerType = DataSourceContextHolder.getCustomerType().toString();
        }
        return customerType;
    }  

}  

该类继承AbstractRoutingDataSource,并重写determineCurrentLookupKey方法

4、在spring中配置多数据源

<bean id="analyseDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_username}" />
<property name="password" value="${jdbc_password}" />
xxx...
</bean>  

<bean id="dlmarketDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url_dlmarket}" />
<property name="username" value="${jdbc_username_dlmarket}" />
<property name="password" value="${jdbc_password_dlmarket}" />
xxx...
<bean>  

<!-- 多数据源的映射关系 -->
<bean id="dataSource" class="com.current.util.DynamicDataSource">
    <property name="targetDataSources">
    <map key-type="java.lang.String">
    <!-- key的值必须要和静态键值对照类中的值相同&nbsp; -->
        <entry value-ref="analyseDataSource" key="Analyse"></entry>
        <entry value-ref="dlmarketDataSource" key="DLmarket"></entry>
    </map>
    </property>
    <property name="defaultTargetDataSource" ref="analyseDataSource"></property>
</bean>  

其他的SessionFactory   事务管理器配置都不需要修改。

5、在Action中切换数据源

public void getList(){
        DataSourceContextHolder.setCustomerType(DataSourceMap.DLmarket);
        int id=1;
        List<Chaining> chainList = chainService.getList(id);
        System.out.println(chainList.get(0).getChaining());
    } 
时间: 2024-10-27 13:57:56

SSH配置动态数据源的相关文章

Spring配置动态数据源-读写分离和多数据源

在现在互联网系统中,随着用户量的增长,单数据源通常无法满足系统的负载要求.因此为了解决用户量增长带来的压力,在数据库层面会采用读写分离技术和数据库拆分等技术.读写分离就是就是一个Master数据库,多个Slave数据库,Master数据库负责数据的写操作,slave库负责数据读操作,通过slave库来降低Master库的负载.因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验.我们通常的做法

Spring 的动态数据源实现

1. 配置多个数据源 这里以两个c3p0数据库连接池的数据源作为实例.在Spring框架下使用c3p0的数据库需要加入c3p0-0.9.1.2.jar(现在最新的)这个支持包.这里以数据同步项目为例: 数据来源库的连接池数据源配置: Xml代码   <bean id="dataSourceFrom" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="dri

spring 配置多数据源 (案例)

*.properties配置: <!--数据连接配置一--> jdbc.type=mysqljdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3066/qshop?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false&allowMultiQueries=true&serverTimezone=GMT%2b8j

SpringBoot和Mycat动态数据源项目整合

SpringBoot项目整合动态数据源(读写分离) 1.配置多个数据源,根据业务需求访问不同的数据,指定对应的策略:增加,删除,修改操作访问对应数据,查询访问对应数据,不同数据库做好的数据一致性的处理.由于此方法相对易懂,简单,不做过多介绍. 2. 动态切换数据源,根据配置的文件,业务动态切换访问的数据库:此方案通过Spring的AOP,AspactJ来实现动态织入,通过编程继承实现Spring中的AbstractRoutingDataSource,来实现数据库访问的动态切换,不仅可以方便扩展,

Spring动态配置多数据源

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

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

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

Spring主从数据库的配置和动态数据源切换原理

原文:https://www.liaoxuefeng.com/article/00151054582348974482c20f7d8431ead5bc32b30354705000 在大型应用程序中,配置主从数据库并使用读写分离是常见的设计模式.在Spring应用程序中,要实现读写分离,最好不要对现有代码进行改动,而是在底层透明地支持. Spring内置了一个AbstractRoutingDataSource,它可以把多个数据源配置成一个Map,然后,根据不同的key返回不同的数据源.因为Abst

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动态数据源实现读写分离

一.创建基于ThreadLocal的动态数据源容器,保证数据源的线程安全性 package com.bounter.mybatis.extension; /** * 基于ThreadLocal实现的动态数据源容器,保证DynamicDataSource的线程安全性 * @author simon * */ public class DynamicDataSourceHolder { private static final ThreadLocal<String> dataSourceHolde