Spring多数据源配置
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 {
-
-
-
protected Object determineCurrentLookupKey() {
-
//在这里做数据源切换
-
return DataSourceTypeManager.get();
-
}
-
-
}
-
public class DataSourceTypeManager {
-
//数据源保存
-
private static final ThreadLocal<MybatisDataSource> dataSourceTypes = new ThreadLocal<MybatisDataSource>() {
-
-
-
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);
-
}
-
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhkeck
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24