使用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)文章
String轉(zhuǎn)double失去精度問(wèn)題及解決
這篇文章主要介紹了關(guān)于String轉(zhuǎn)double失去精度問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07@Scheduled fixedDelayString 加載properties配置方式
這篇文章主要介紹了@Scheduled fixedDelayString 加載properties配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10MQ的分類(lèi)組成優(yōu)缺點(diǎn)測(cè)試點(diǎn)入門(mén)教程
這篇文章主要為大家介紹了MQ的分類(lèi)組成優(yōu)缺點(diǎn)測(cè)試點(diǎn)入門(mén)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05談?wù)凧ava類(lèi)型中ParameterizedType,GenericArrayType,TypeVariabl,Wild
這篇文章主要介紹Java類(lèi)型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType的相關(guān)資料,需要的朋友可以參考下2015-10-10Java使用Lettuce客戶(hù)端在Redis在主從復(fù)制模式下命令執(zhí)行的操作
這篇文章主要介紹了Java使用Lettuce客戶(hù)端在Redis在主從復(fù)制模式下命令執(zhí)行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04