国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

spring+mybatis多數據源切換

2019-11-14 15:20:44
字體:
來源:轉載
供稿:網友

在實際的公司項目中,很可能會遇到一個問題就是,一個java項目,但是項目中涉及兩個數據庫,這兩個數據庫還在不同ip的機子上。

遇到這種情況的時候,我們有兩個選擇
1、不走sPRing的aop方式,直接去多做兩個dataSource
2、用spring進行管理,靈活地進行數據源切換
 
現在就來對第2種方式進行筆記:
spring.xml配置文件:
 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" xmlns:aop="http://www.springframework.org/schema/aop" 4 xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" 5 xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation=" 7      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 8      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 9      http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd10      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd11  http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd12      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">  13   14        <!--配置MySQL數據庫參數 -->15     <context:property-placeholder location="mysql.properties" />16     17     <!--多個數據源配置  -->18     <bean id="db1" class="org.apache.commons.dbcp.BasicDataSource"19         destroy-method="close">20         <!-- 連接數據庫參數 -->21         <property name="driverClassName" value="${db1.driver}" />22         <property name="url" value="${db1.url}" />23         <property name="username" value="${db1.username}" />24         <property name="passWord" value="${db1.password}" />25      26       <!--連接池參數 -->27 <property name="initialSize" value="10" />28 <property name="maxActive" value="500" />29 <property name="maxIdle" value="40" />30 <property name="minIdle" value="10" />31     </bean>32     33     <bean id="db2" class="org.apache.commons.dbcp.BasicDataSource"34         destroy-method="close">35         <!-- 連接數據庫參數 -->36         <property name="driverClassName" value="${db2.driver}" />37         <property name="url" value="${db2.url}" />38         <property name="username" value="${db2.username}" />39         <property name="password" value="${db2.password}" />40      41       <!--連接池參數 -->42 <property name="initialSize" value="10" />43 <property name="maxActive" value="500" />44 <property name="maxIdle" value="40" />45 <property name="minIdle" value="10" />46     </bean>47     48     <bean id="dataSource" class="com.ckd.datasource.mybatis.DynamicDataSource">49         <property name="targetDataSources">50             <map key-type="java.lang.String">51                 <entry key="db1" value-ref="db1" />52                 <entry key="db2" value-ref="db2" />53             </map>54         </property>55         <property name="defaultTargetDataSource" ref="db2" />56     </bean>57     58     <!-- mybatis配置 -->59        <bean id="sqlsessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">60 <property name="dataSource" ref="dataSource" />61 <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />62 <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/>63 </bean>64 <!--獲取sqlSession-->65 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">66 <constructor-arg index="0">67          <ref bean="sqlSessionFactory"/>68         </constructor-arg>69 </bean> 70 <!-- 事務管理器配置,單數據源事務 -->71 <bean id="transactionManager"72 class="org.springframework.jdbc.datasource.DataSourceTransactionManager">73 <property name="dataSource" ref="dataSource" />74 </bean>75      76 </beans>  

具體實現切換的操作類:

 1 /** 2  * @fileName DynamicDataSource.java 3  * @author chenkaideng 4  * @date 2015年8月27日 5  * @describe 動態獲取數據源 6  */ 7 public class DynamicDataSource extends AbstractRoutingDataSource{ 8  @Override 9  protected Object determineCurrentLookupKey() {10   // TODO Auto-generated method stub11   return DataSourceContextHolder.getDbType();12  }13 }
/** * @fileName DataSourceContextHolder.java * @author chenkaideng * @date 2015年8月27日 * @describe 數據源設值Holder類 */public class DataSourceContextHolder {   private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();       public static void setDbType(String dbType) {     contextHolder.set(dbType);    }       public static String getDbType() {     return ((String) contextHolder.get());    }       public static void clearDbType() {     contextHolder.remove();    }  } 
弄完以上的事情,剩下的事情就簡單了
    
    -》先是加載spring.xml文件applicationContext = new ClassPathXmlApplicationContext("spring.xml");
    -》然后設置數據源DataSourceContextHolder.setDbType("db1");
    -》接著從applicationContext 中獲取sqlSession = (SqlSession) applicationContext.getBean("sqlSession");
    -》最后就可以拿這個sqlSession去做增刪改查的操作
 
注意:不用對這個sqlSession做close和comit的操作,因為都已經由spring自己管理了,不用手動做這些操作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 增城市| 汤阴县| 友谊县| 鸡泽县| 广河县| 枣强县| 宁安市| 温宿县| 瑞安市| 邯郸县| 佳木斯市| 五台县| 通城县| 区。| 方正县| 灌南县| 青州市| 宁津县| 武清区| 镇原县| 永州市| 禹州市| 陵川县| 衡阳县| 海淀区| 郴州市| 汉源县| 阳曲县| 会宁县| 瑞昌市| 上高县| 南阳市| 武清区| 紫金县| 凤阳县| 隆昌县| 宜阳县| 宕昌县| 灌阳县| 景德镇市| 澄江县|