首页 > 其他分享 >Spring多数据源配置

Spring多数据源配置

时间:2022-10-09 12:02:34浏览次数:48  
标签:jdbc Spring 数据源 配置 master mysql public clickhouse


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

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

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

方式一:创建多个SqlSessionFactory

整合mysql+clickhouse双数据源

<!--mybatis + mysql + druid-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!--clickhouse-->
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.1.53</version>
</dependency>

jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.master.url=jdbc:mysql://localhost:3306/test
jdbc.master.username=root
jdbc.master.password=root
jdbc.master.maxActive=10
jdbc.master.minIdle=5
jdbc.master.maxWait=10000

clickhouse.properties

clickhouse.driverClassName=ru.yandex.clickhouse.ClickHouseDriver
clickhouse.url=jdbc:clickhouse://localhost:8123/test
clickhouse.username=root
clickhouse.password=root
clickhouse.maxActive=10
clickhouse.minIdle=5
clickhouse.maxWait=10000

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

<!--加载mysql+clickhouse配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<context:property-placeholder location="classpath:clickhouse.properties"/>

<!--=======================mysql数据源配置=======================-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.master.url}"/>
<property name="password" value="${jdbc.master.password}"/>
<property name="username" value="${jdbc.master.username}"/>
<property name="maxActive" value="${jdbc.master.maxActive}"/>
<property name="maxWait" value="${jdbc.master.maxWait}"/>
<property name="minIdle" value="${jdbc.master.minIdle}"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.demo.flash.price.redpot.entity"/>
<property name="mapperLocations" value="classpath:mysql_mapper/*.xml"/>
<property name="plugins">
<set>
<!--配置pageHelper 分页插件-->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<!--方言:-->
<prop key="helperDialect">mysql</prop>
</props>
</property>
</bean>
</set>
</property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.demo.flash.price.redpot.mapperMysql"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />

<!--=======================clickhouse数据源配置=======================-->
<bean id="dataSourceClickhouse" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${clickhouse.driverClassName}"/>
<property name="url" value="${clickhouse.url}"/>
<property name="password" value="${clickhouse.password}"/>
<property name="username" value="${clickhouse.username}"/>
<property name="maxActive" value="${clickhouse.maxActive}"/>
<property name="maxWait" value="${clickhouse.maxWait}"/>
<property name="minIdle" value="${clickhouse.minIdle}"/>
</bean>
<bean id="sqlSessionFactoryClickhouse" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="dataSource" ref="dataSourceClickhouse"/>
<property name="typeAliasesPackage" value="com.demo.flash.price.redpot.entity"/>
<property name="mapperLocations" value="classpath:clickhouse_mapper/*.xml"/>
<property name="plugins">
<set>
<!--配置pageHelper 分页插件-->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<!--方言:-->
<prop key="helperDialect">mysql</prop>
</props>
</property>
</bean>
</set>
</property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.demo.flash.price.redpot.mapperClickhouse"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryClickhouse"/>
</bean>
<bean id="transactionManagerClickhouse"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourceClickhouse"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManagerClickhouse" />

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

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

public class DynamicDataSource extends AbstractRoutingDataSource {

@Override
protected Object determineCurrentLookupKey() {
//在这里做数据源切换
return DataSourceTypeManager.get();
}

}
public class DataSourceTypeManager {
//数据源保存
private static final ThreadLocal<MybatisDataSource> dataSourceTypes = new ThreadLocal<MybatisDataSource>() {

@Override
protected MybatisDataSource initialValue() {
return MybatisDataSource.JKDSJ;
}
};

public static MybatisDataSource get() {
return dataSourceTypes.get();
}

public static void set(MybatisDataSource dataSourceType) {
dataSourceTypes.set(dataSourceType);
}

public static void reset() {
dataSourceTypes.set(MybatisDataSource.JKDSJ);
}

}


标签:jdbc,Spring,数据源,配置,master,mysql,public,clickhouse
From: https://blog.51cto.com/u_11334685/5740086

相关文章

  • Springboot自定义Stater
    1、默认启动器Boot会将项目中常用的场景做成对应的starter启动器,项目中涉及到什么场景就引入该场景对应的启动器,项目中引入这些启动器之后,和这个starter相关的依赖也会被引......
  • Spring读取配置文件
    一、Resource在Java程序中,我们经常会读取配置文件、资源文件等。使用Spring容器时,我们也可以把“文件”注入进来,方便程序读取。Spring提供了一个​​org.springframework.co......
  • Springboot自动配置原理
    一个boot项目启动类有个@SpringBootApplication注解,查看此注解主要包括@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解@SpringBootConfigura......
  • springCloud 中 当需要有生产者集群的时候几个关键点
     前提条件是:使用Eureka 作为注册中心,并且搭建好了 Euraka 集群。当我们需要使用 多个生产者来形成集群来达到高可用。 生产者就是服务提供者,消费者就是服务调用者。 ......
  • springcloud- Eureka 单机版注册中心
    eureka 使用过程 简单的梳理:服务客户三步走,pom,yml,主启动。 首先搭建 eureka 注册中心服务 创建一个 maven 项目 ##引入相关的pom<?xmlversion="1.0"encoding......
  • 说说 Spring 定时任务如何大规模企业级运用
    作者:姚辉(千习)Spring定时任务简介定时任务是业务应用开发中非常普遍存在的场景(如:每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报......
  • 新电脑配置心得
    1、现在的xcode包是越来越大了,从appstore上下载的,真的是太慢了,下载就用了一天的时间安装用了几个小时,然后就下班了,幸好第二天来的时候已经安装好了建议:尽量是在开发者官......
  • 把你的springboot启动图(banner)设置成圣嘉然!
    在resource文件夹下面新建一个banner.txt的文件!然后插入如下的文字!点击查看代码...,]]]/@@@@@O]]]]]`........,]]]..............
  • springCloud - 选择最合适版本问题
     尚硅谷的第一季 springcloud 学完,也忘完了。于是今天阳哥出了第二季,我就跟着再学一遍,这次要做好笔记。 ## 问题概要这篇主要解决的是 springcloud 选择版本的问题,......
  • springCloud- 搭建项目全部详细过程(创建一个父工程)
     这篇文章里边会有 IDEA 相关本地环境的配置,比如编码格式,等等。 另外这篇文章会详细的记录整个创建的过程,我都会有截图 前提条件需要:maven环境(配置过国内的镜像), idea......