Spring Mybatis多数据源配置范例

 

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <beans xmlns="http://www.springframework.org/schema/beans"
  3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4        xmlns:tx="http://www.springframework.org/schema/tx"
  5        xmlns:p="http://www.springframework.org/schema/p"
  6        xmlns:context="http://www.springframework.org/schema/context"
  7        xmlns:aop="http://www.springframework.org/schema/aop"
  8        xsi:schemaLocation="
  9        http://www.springframework.org/schema/beans
 10        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
 11        http://www.springframework.org/schema/context
 12        http://www.springframework.org/schema/context/spring-context-4.3.xsd
 13        http://www.springframework.org/schema/aop
 14        http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
 15        http://www.springframework.org/schema/tx
 16        http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 17 
 18     <!-- 框架 -->
 19     <bean id="messageFactory" class="catf.core.message.factory.MessageFactory">
 20         <constructor-arg index="0" name="resource" value="catf/resource/mapper/msg/catf_messages_mapper.xml"/>
 21     </bean>
 22 
 23     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 24         <property name="locations">
 25             <list>
 26                 <value>classpath:spring/handler.properties</value>
 27                 <value>classpath*:/config/扩展api/expand-base-config.properties</value>
 28                 <value>classpath:spring/ffmpeg.properties</value>
 29                 <value>classpath:公共数据/mysql配置.properties</value>
 30             </list>
 31         </property>
 32         <property name="fileEncoding" value="utf-8" />
 33     </bean>
 34 
 35 
 36     <bean id="dataSourceParent" abstract="true" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
 37         <property name="filters" value="stat" />
 38         <property name="maxActive" value="20" />
 39         <property name="initialSize" value="1" />
 40         <property name="maxWait" value="60000" />
 41         <property name="minIdle" value="1" />
 42         <property name="timeBetweenEvictionRunsMillis" value="60000" />
 43         <property name="minEvictableIdleTimeMillis" value="300000" />
 44         <property name="testWhileIdle" value="true" />
 45         <property name="testOnBorrow" value="false" />
 46         <property name="testOnReturn" value="false" />
 47         <property name="poolPreparedStatements" value="true" />
 48         <property name="maxOpenPreparedStatements" value="20" />
 49         <property name="asyncInit" value="true" />
 50     </bean>
 51 
 52     <bean id="dataSourceMaserati" parent="dataSourceParent">
 53         <property name="url" value="${jdbc.url}" />
 54         <property name="username" value="${jdbc.username}" />
 55         <property name="password" value="${jdbc.password}" />
 56     </bean>
 57 
 58     <bean id="dataSourceBentley" parent="dataSourceParent">
 59         <property name="url" value="${jdbc2.url}" />
 60         <property name="username" value="${jdbc2.username}" />
 61         <property name="password" value="${jdbc2.password}" />
 62     </bean>
 63 
 64     <bean id="dataSourceSwitcher" class="catf.component.mybatis.manager.ThreadLocalRountingDataSource">
 65         <property name="targetDataSources">
 66             <map>
 67                 <entry key="dataSourceMarserati" value-ref="dataSourceMaserati"/>
 68                 <entry key="dataSourceBentley" value-ref="dataSourceBentley"/>
 69             </map>
 70         </property>
 71         <property name="defaultTargetDataSource" ref="dataSourceMaserati"/>
 72     </bean>
 73 
 74     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 75         <property name="dataSource" ref="dataSourceSwitcher"/>
 76         <property name="typeAliasesPackage" value="catf.component.mybatis"/>
 77         <property name="mapperLocations" value="classpath:catf/component/mybatis/mapper/mybatisMapper.xml"/>
 78     </bean>
 79 
 80     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
 81           p:basePackage="catf.component.mybatis.dao"
 82           p:sqlSessionFactoryBeanName="sqlSessionFactory">
 83     </bean>
 84 
 85     <!-- 4. 事务管理 : DataSourceTransactionManager -->
 86     <bean  id="txManager"
 87            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 88         <property name="dataSource" ref="dataSourceSwitcher"/>
 89     </bean>
 90 
 91     <!-- 5. 使用声明式事务 -->
 92     <tx:annotation-driven transaction-manager="txManager" />
 93 
 94     <bean id="handlerStart" class="catf.core.handler.frame.spring.HandlerStart">
 95         <property name="frameMessageHandler" value="${handler.message.frame}"/>
 96         <property name="tstExecMessageHandler" value="${handler.message.tst.exec}"/>
 97         <property name="interpreterHandler" value="${handler.interpreter}"/>
 98         <property name="loaderHandler" value="${handler.loader}"/>
 99         <property name="fileOperateHandler" value="${handler.file.operate}"/>
100     </bean>
101     <bean id="ffmpegConfig" class="catf.executor.record.model.FFmpegConfig">
102         <property name="windowsCmd" value="${ffmpeg.win}"/>
103         <property name="linuxCmd" value="${ffmpeg.lx}"/>
104         <property name="macOSCmd" value="${ffmpeg.mac}"/>
105     </bean>
106 
107     <context:component-scan
108             base-package="catf.core.thread.pool,catf.core.handler.frame.spring,catf.core.message.service,catf.core.xml.service">
109         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
110         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
111         <context:exclude-filter type="regex" expression="catf.core.handler.frame.spring.HandlerStart"/>
112     </context:component-scan>
113     <context:component-scan
114             base-package="catf.interpreter, catf.loader, catf.executor">
115         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
116         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
117         <context:exclude-filter type="regex" expression="catf.executor.record.model.FFmpegConfig"/>
118     </context:component-scan>
119 
120     <!-- component -->
121     <context:component-scan
122             base-package="catf.component">
123         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
124         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
125         <context:exclude-filter type="regex" expression="catf.executor.record.model.FFmpegConfig"/>
126     </context:component-scan>
127     <aop:aspectj-autoproxy proxy-target-class="true" />
128 
129     <!-- 扩展组件 -->
130     <context:component-scan
131             base-package="catf.expand.component.base">
132         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
133         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
134     </context:component-scan>
135     <context:component-scan
136             base-package="catf.expand">
137         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
138         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
139     </context:component-scan>
140     <context:component-scan
141             base-package="catf.expand.component.web">
142         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
143         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
144     </context:component-scan>
145     <context:component-scan
146             base-package="weshare.token">
147         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
148         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
149     </context:component-scan>
150 
151 </beans>

 

mysql配置.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://20.1.1.11:16306/maserati?tinyInt1isBit=false&autoReconnect=true
jdbc.username=root
jdbc.password=root

jdbc2.driver=com.mysql.cj.jdbc.Driver
jdbc2.url=jdbc:mysql://20.1.1.11:16306/bentley?tinyInt1isBit=false&autoReconnect=true
jdbc2.username=root
jdbc2.password=root

 

ThreadLocalRountingDataSource.class
 1 package catf.component.mybatis.manager;
 2 
 3 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 4 
 5 
 6 public class ThreadLocalRountingDataSource extends AbstractRoutingDataSource {
 7     @Override
 8     protected Object determineCurrentLookupKey() {
 9         return DataSourcesTypeManager.get();
10     }
11 
12 }

 

DataSourcesTypeManager .class
 1 package catf.component.mybatis.manager;
 2 
 3 public class DataSourcesTypeManager {
 4 
 5     private static final ThreadLocal<String> dataSourceTypes = new ThreadLocal<>();
 6 
 7     public static String get() {
 8         return dataSourceTypes.get();
 9     }
10 
11     /**
12      * 设置数据源
13      */
14     public static void set(String dataSourceType) {
15         dataSourceTypes.set(dataSourceType);
16     }
17 
18     /**
19      * 清除dataSourceKey的值
20      */
21     public static void remove() {
22         dataSourceTypes.remove();
23     }
24 
25 }

 

posted @ 2019-04-28 15:15  星瑞  阅读(358)  评论(0编辑  收藏  举报