ssm框架連接兩個MySQL數據庫隨筆

1.在原有的ssm框架中jdbc.properties文件添加另一個MySQL 連接路徑 

2.配置spring-mybatis文件

<bean id="defultdataSource" class="org.apache.commons.dbcp.BasicDataSource"  
        destroy-method="close">  
        <property name="driverClassName" value="${driver}" />  
        <property name="url" value="${url}" />  
        <property name="username" value="${username}" />  
        <property name="password" value="${password}" />  
        <!-- 初始化連接大小 -->  
        <property name="initialSize" value="${initialSize}"></property>  
        <!-- 連接池最大數量 -->  
        <property name="maxActive" value="${maxActive}"></property>  
        <!-- 連接池最大空閒 -->  
        <property name="maxIdle" value="${maxIdle}"></property>  
        <!-- 連接池最小空閒 -->  
        <property name="minIdle" value="${minIdle}"></property>  
        <!-- 獲取連接最大等待時間 -->  
        <property name="maxWait" value="${maxWait}"></property>  
    </bean>  
    
     <!-- 配置第二個數據源 -->
    <bean id="jrt_dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${driver}" />  
        <property name="url" value="${jrturl}" />  
        <property name="username" value="${username}" />  
        <property name="password" value="${password}" />  
        <!-- 初始化連接大小 -->  
        <property name="initialSize" value="${initialSize}"></property>  
        <!-- 連接池最大數量 -->  
        <property name="maxActive" value="${maxActive}"></property>  
        <!-- 連接池最大空閒 -->  
        <property name="maxIdle" value="${maxIdle}"></property>  
        <!-- 連接池最小空閒 -->  
        <property name="minIdle" value="${minIdle}"></property>  
        <!-- 獲取連接最大等待時間 -->  
        <property name="maxWait" value="${maxWait}"></property>  
    </bean>
 
 
    <bean id="dataSource" class="com.sand.ssm.utils.DynamicDataSource">
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <!-- 指定lookupKey和與之對應的數據源,這裏的key可以自行定義,要切換數據庫的時候以key爲標識,不要寫錯 -->
                <entry key="defultdataSource" value-ref="defultdataSource"></entry>
                <entry key="jrt_dataSource" value-ref="jrt_dataSource"></entry>
            </map>
        </property>
        <!-- 這裏可以指定默認的數據源 -->
        <property name="defaultTargetDataSource" ref="defultdataSource" />
    </bean>

3.添加切換數據庫的工具類

(1)創建DynamicDataSource工具類繼承AbstractRoutingDataSource

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        return DynamicDataSourceHolder.getDataSource();
    }

}

(2)創建DynamicDataSourceHolder工具類

public class DynamicDataSourceHolder {
    private static final ThreadLocal<String> THREAD_DATA_SOURCE = new ThreadLocal();
      
      public static String getDataSource()
      {
        return (String)THREAD_DATA_SOURCE.get();
      }
      
      public static void setDataSource(String dataSource)
      {
        THREAD_DATA_SOURCE.set(dataSource);
      }
      
      public static void clearDataSource()
      {
        THREAD_DATA_SOURCE.remove();
      }
}

4.添加兩個數據庫對應的test數據表的映射文件,及類文件,編寫對應的service文件及實現

5.編寫對應的controller文件,

@Component
public class GftestController {
    
    @Resource
    private GFtestService gFtestService;
    @Resource
    private SZTestService sZTestService;
    
    @Scheduled(cron="0 */1 * * * *")
      public void gfsjcjtest(){
         DynamicDataSourceHolder.setDataSource("defultdataSource");
        System.out.println("gftest 保存開始");
        GFTest gf=new GFTest();
        gf.setName("羅郅");
        
        int i=gFtestService.insertSelective(gf);
        System.out.println("保存結果+"+i);
        
    }
    
    @Scheduled(cron="0 */1 * * * *")
      public void szsjcjtest(){
          DynamicDataSourceHolder.setDataSource("jrt_dataSource");
        System.out.println("sztest 保存開始");
        SZTest gf=new SZTest();
        gf.setName("羅小郅");
        int i=sZTestService.insertSelective(gf);
        System.out.println("保存結果+"+i);
        
    }

5.實現數據庫的定時添加數據


      
      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章