• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Spring多数据源配置

武飞扬头像
程序三两行
帮助1

Spring多数据源配置,这里持久层框架使用mybatis,集成Mybatis多数据源有两种方式:

1、创建多个SqlSessionFactory,扫描每个SqlSessionFactoryBean对应的包,形成了每个Factory对应一个数据源。

2、创建一个SqlSessionFactory,通过动态切换数据源对象,达到多数据源操作功能。

方式一:创建多个SqlSessionFactory

整合mysql clickhouse双数据源

  1.  
    <!--mybatis mysql druid-->
  2.  
    <dependency>
  3.  
    <groupId>org.mybatis</groupId>
  4.  
    <artifactId>mybatis-spring</artifactId>
  5.  
    <version>2.0.6</version>
  6.  
    </dependency>
  7.  
    <dependency>
  8.  
    <groupId>com.alibaba</groupId>
  9.  
    <artifactId>druid</artifactId>
  10.  
    <version>1.1.23</version>
  11.  
    </dependency>
  12.  
    <dependency>
  13.  
    <groupId>org.mybatis</groupId>
  14.  
    <artifactId>mybatis</artifactId>
  15.  
    <version>3.4.5</version>
  16.  
    </dependency>
  17.  
    <dependency>
  18.  
    <groupId>mysql</groupId>
  19.  
    <artifactId>mysql-connector-java</artifactId>
  20.  
    <version>5.1.49</version>
  21.  
    </dependency>
  22.  
    <!--clickhouse-->
  23.  
    <dependency>
  24.  
    <groupId>ru.yandex.clickhouse</groupId>
  25.  
    <artifactId>clickhouse-jdbc</artifactId>
  26.  
    <version>0.1.53</version>
  27.  
    </dependency>

jdbc.properties

  1.  
    jdbc.driverClassName=com.mysql.jdbc.Driver
  2.  
    jdbc.master.url=jdbc:mysql://localhost:3306/test
  3.  
    jdbc.master.username=root
  4.  
    jdbc.master.password=root
  5.  
    jdbc.master.maxActive=10
  6.  
    jdbc.master.minIdle=5
  7.  
    jdbc.master.maxWait=10000

clickhouse.properties

  1.  
    clickhouse.driverClassName=ru.yandex.clickhouse.ClickHouseDriver
  2.  
    clickhouse.url=jdbc:clickhouse://localhost:8123/test
  3.  
    clickhouse.username=root
  4.  
    clickhouse.password=root
  5.  
    clickhouse.maxActive=10
  6.  
    clickhouse.minIdle=5
  7.  
    clickhouse.maxWait=10000

spring配置文件中配置多个数据源

  1.  
    <!--加载mysql clickhouse配置文件-->
  2.  
    <context:property-placeholder location="classpath:jdbc.properties"/>
  3.  
    <context:property-placeholder location="classpath:clickhouse.properties"/>
  4.  
     
  5.  
    <!--=======================mysql数据源配置=======================-->
  6.  
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  7.  
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
  8.  
    <property name="url" value="${jdbc.master.url}"/>
  9.  
    <property name="password" value="${jdbc.master.password}"/>
  10.  
    <property name="username" value="${jdbc.master.username}"/>
  11.  
    <property name="maxActive" value="${jdbc.master.maxActive}"/>
  12.  
    <property name="maxWait" value="${jdbc.master.maxWait}"/>
  13.  
    <property name="minIdle" value="${jdbc.master.minIdle}"/>
  14.  
    </bean>
  15.  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  16.  
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
  17.  
    <property name="dataSource" ref="dataSource"/>
  18.  
    <property name="typeAliasesPackage" value="com.demo.flash.price.redpot.entity"/>
  19.  
    <property name="mapperLocations" value="classpath:mysql_mapper/*.xml"/>
  20.  
    <property name="plugins">
  21.  
    <set>
  22.  
    <!--配置pageHelper 分页插件-->
  23.  
    <bean class="com.github.pagehelper.PageInterceptor">
  24.  
    <property name="properties">
  25.  
    <props>
  26.  
    <!--方言:-->
  27.  
    <prop key="helperDialect">mysql</prop>
  28.  
    </props>
  29.  
    </property>
  30.  
    </bean>
  31.  
    </set>
  32.  
    </property>
  33.  
    </bean>
  34.  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  35.  
    <property name="basePackage" value="com.demo.flash.price.redpot.mapperMysql"/>
  36.  
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
  37.  
    </bean>
  38.  
    <bean id="transactionManager"
  39.  
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  40.  
    <property name="dataSource" ref="dataSource"></property>
  41.  
    </bean>
  42.  
    <tx:annotation-driven transaction-manager="transactionManager" />
  43.  
     
  44.  
    <!--=======================clickhouse数据源配置=======================-->
  45.  
    <bean id="dataSourceClickhouse" class="com.alibaba.druid.pool.DruidDataSource">
  46.  
    <property name="driverClassName" value="${clickhouse.driverClassName}"/>
  47.  
    <property name="url" value="${clickhouse.url}"/>
  48.  
    <property name="password" value="${clickhouse.password}"/>
  49.  
    <property name="username" value="${clickhouse.username}"/>
  50.  
    <property name="maxActive" value="${clickhouse.maxActive}"/>
  51.  
    <property name="maxWait" value="${clickhouse.maxWait}"/>
  52.  
    <property name="minIdle" value="${clickhouse.minIdle}"/>
  53.  
    </bean>
  54.  
    <bean id="sqlSessionFactoryClickhouse" class="org.mybatis.spring.SqlSessionFactoryBean">
  55.  
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
  56.  
    <property name="dataSource" ref="dataSourceClickhouse"/>
  57.  
    <property name="typeAliasesPackage" value="com.demo.flash.price.redpot.entity"/>
  58.  
    <property name="mapperLocations" value="classpath:clickhouse_mapper/*.xml"/>
  59.  
    <property name="plugins">
  60.  
    <set>
  61.  
    <!--配置pageHelper 分页插件-->
  62.  
    <bean class="com.github.pagehelper.PageInterceptor">
  63.  
    <property name="properties">
  64.  
    <props>
  65.  
    <!--方言:-->
  66.  
    <prop key="helperDialect">mysql</prop>
  67.  
    </props>
  68.  
    </property>
  69.  
    </bean>
  70.  
    </set>
  71.  
    </property>
  72.  
    </bean>
  73.  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  74.  
    <property name="basePackage" value="com.demo.flash.price.redpot.mapperClickhouse"/>
  75.  
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryClickhouse"/>
  76.  
    </bean>
  77.  
    <bean id="transactionManagerClickhouse"
  78.  
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  79.  
    <property name="dataSource" ref="dataSourceClickhouse"></property>
  80.  
    </bean>
  81.  
    <tx:annotation-driven transaction-manager="transactionManagerClickhouse" />

方式二:动态切换数据源对象

创建单个SqlSessionFactory,动态切换数据源对象 ,在Spring的jdbc包下有个支持动态数据源切换的抽象类AbstractRoutingDataSource,其中的抽象方法determineCurrentLookupKey需要我们自己来实现,到底返回哪个数据源

  1.  
    public class DynamicDataSource extends AbstractRoutingDataSource {
  2.  
     
  3.  
    @Override
  4.  
    protected Object determineCurrentLookupKey() {
  5.  
    //在这里做数据源切换
  6.  
    return DataSourceTypeManager.get();
  7.  
    }
  8.  
     
  9.  
    }
  1.  
    public class DataSourceTypeManager {
  2.  
    //数据源保存
  3.  
    private static final ThreadLocal<MybatisDataSource> dataSourceTypes = new ThreadLocal<MybatisDataSource>() {
  4.  
     
  5.  
    @Override
  6.  
    protected MybatisDataSource initialValue() {
  7.  
    return MybatisDataSource.JKDSJ;
  8.  
    }
  9.  
    };
  10.  
     
  11.  
    public static MybatisDataSource get() {
  12.  
    return dataSourceTypes.get();
  13.  
    }
  14.  
     
  15.  
    public static void set(MybatisDataSource dataSourceType) {
  16.  
    dataSourceTypes.set(dataSourceType);
  17.  
    }
  18.  
     
  19.  
    public static void reset() {
  20.  
    dataSourceTypes.set(MybatisDataSource.JKDSJ);
  21.  
    }
  22.  
     
  23.  
    }

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhkeck
系列文章
更多 icon
同类精品
更多 icon
继续加载