使用Spring多數(shù)據(jù)源配置
Spring多數(shù)據(jù)源配置
Spring多數(shù)據(jù)源配置,這里持久層框架使用mybatis,集成Mybatis多數(shù)據(jù)源有兩種方式:
1、創(chuàng)建多個(gè)SqlSessionFactory,掃描每個(gè)SqlSessionFactoryBean對(duì)應(yīng)的包,形成了每個(gè)Factory對(duì)應(yīng)一個(gè)數(shù)據(jù)源。
2、創(chuàng)建一個(gè)SqlSessionFactory,通過(guò)動(dòng)態(tài)切換數(shù)據(jù)源對(duì)象,達(dá)到多數(shù)據(jù)源操作功能。
方式一:創(chuàng)建多個(gè)SqlSessionFactory
- 整合mysql+clickhouse雙數(shù)據(jù)源
<!--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配置文件中配置多個(gè)數(shù)據(jù)源
<!--加載mysql+clickhouse配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<context:property-placeholder location="classpath:clickhouse.properties"/>
<!--=======================mysql數(shù)據(jù)源配置=======================-->
<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 分頁(yè)插件-->
<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數(shù)據(jù)源配置=======================-->
<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 分頁(yè)插件-->
<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" />方式二:動(dòng)態(tài)切換數(shù)據(jù)源對(duì)象
創(chuàng)建單個(gè)SqlSessionFactory,動(dòng)態(tài)切換數(shù)據(jù)源對(duì)象 ,在Spring的jdbc包下有個(gè)支持動(dòng)態(tài)數(shù)據(jù)源切換的抽象類(lèi)AbstractRoutingDataSource,其中的抽象方法determineCurrentLookupKey需要我們自己來(lái)實(shí)現(xiàn),到底返回哪個(gè)數(shù)據(jù)源
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
//在這里做數(shù)據(jù)源切換
return DataSourceTypeManager.get();
}
}public class DataSourceTypeManager {
//數(shù)據(jù)源保存
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);
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot+VUE實(shí)現(xiàn)前后端分離的實(shí)戰(zhàn)記錄
這篇文章主要介紹了SpringBoot+VUE實(shí)現(xiàn)前后端分離的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
從配置到監(jiān)控詳解SpringBoot微服務(wù)性能優(yōu)化實(shí)踐指南
Spring Boot憑借快速開(kāi)發(fā)、自動(dòng)化配置和豐富生態(tài),被廣泛用于構(gòu)建微服務(wù),本指南將聚焦Spring Boot微服務(wù)性能優(yōu)化,希望可以幫助大家掌握性能調(diào)優(yōu)要點(diǎn)2025-08-08
如何解決idea安裝插件后報(bào)錯(cuò)打不開(kāi)問(wèn)題
這篇文章主要介紹了如何解決idea安裝插件后報(bào)錯(cuò)打不開(kāi)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Java 基礎(chǔ)語(yǔ)法讓你弄懂類(lèi)和對(duì)象
C 語(yǔ)言是面向過(guò)程的,而 Java 是面向?qū)ο笫俏覀兂B?tīng)到的一句話(huà),這章將帶你揭曉Java 基礎(chǔ)語(yǔ)法中類(lèi)與對(duì)象到底是什么,需要的朋友請(qǐng)參考下文2021-08-08
Java 泛型總結(jié)(一):基本用法與類(lèi)型擦除
本文主要介紹了Java泛型的使用以及類(lèi)型擦除相關(guān)的問(wèn)題。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03
java中VO和DTO之間的轉(zhuǎn)換實(shí)現(xiàn)
本文主要介紹了java中VO和DTO之間的轉(zhuǎn)換實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
java容器類(lèi)知識(shí)點(diǎn)詳細(xì)總結(jié)
這篇文章主要介紹了java容器類(lèi)知識(shí)點(diǎn)詳細(xì)總結(jié),2019-06-06

