spring-mybatis配置多資料來源
阿新 • • 發佈:2018-11-14
單資料來源,就是建立一個連線池,然後在建立mybatis的SqlSessionFactoryBean時,指定這個資料來源。
多資料來源:建立多個連線池,將這多個連線池統一起來管理,通過key-value方式,我們在使用時指定哪個key,則使用哪個資料來源,我們只需要繼承spring幫我們寫好的這個類。
package cn.fzq.ds; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; /** * Created by Blossom on 2018/11/13. */ public class DbcontextHolder extends AbstractRoutingDataSource { public static final String DATASOURCE = "dataSource"; public static final String DATASOURCE_DEMO = "dataSourceDemo"; public static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); /** * 設定當前資料來源 * @param dbType */ public static void setDbType(String dbType){ contextHolder.set(dbType); } /** * 獲得當前資料來源 * @return */ public static String getDbType(){ String dbType = (String)contextHolder.get(); return dbType; } /** * 清除上下文,remove掉我們此次設定的資料來源,恢復到預設資料來源 */ public static void clearContext(){ contextHolder.remove(); } @Override protected Object determineCurrentLookupKey() { return DbcontextHolder.getDbType(); } }
<!-- 讀取config.properties檔案,配置連線池 --> <util:properties id="config" location="classpath:config.properties"/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="#{config.classname}"/> <property name="url" value="#{config.url}"/> <property name="username" value="#{config.username}"/> <property name="password" value="#{config.password}"/> </bean> <bean id="dataSourceDemo" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="#{config.classname}"/> <property name="url" value="#{config.url}"/> <property name="username" value="#{config.username_demo}"/> <property name="password" value="#{config.password_demo}"/> </bean> <bean id="dynamicDataSource" class="cn.fzq.ds.DbcontextHolder" > <property name="targetDataSources"> <map key-type="java.lang.String"> <!--通過不同的key決定用哪個dataSource--> <entry value-ref="dataSource" key="dataSource"></entry> <entry value-ref="dataSourceDemo" key="dataSourceDemo"></entry> </map> </property> <!--設定預設的dataSource--> <property name="defaultTargetDataSource" ref="dataSource"> </property> </bean>
<!-- 配置SqlSessionFactoryBean --> <bean id="ssfb" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 指定連線池的位置 --> <property name="dataSource" ref="dynamicDataSource"/> <!-- 指定對映檔案的位置 --> <property name="mapperLocations" value="classpath:cn/fzq/entity/*.xml"/> </bean> <!-- 配置MapperScannerConfigurer掃描 --> <!-- 指定對映器的位置 --> <bean id = "mapperScanner" class = "org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name = "basePackage" value = "cn.fzq.dao"></property> </bean>