Spring MyBatis多資料來源的切換

2021-09-05 12:40:22 字數 1910 閱讀 8036

這兩個類的類名可以根據自己的編碼習慣命名,我的命名及實現**如下:

(1)、datasourcecontextholder:用於進行資料來源的獲取、設定及還原

package com.cpms.trasen.common.tk;

import org.slf4j.logger;

import org.slf4j.logge***ctory;

/** * 資料來源設定類

* * @author bigdata-cp

* */

public class datasourcecontextholder

// 獲取現在的資料來源

public static string getdatasourcetype()

// 還原(清除設定的)資料來源

public static void cleardatasourcetype()

}

(2)、dynamicdatasource:需要繼承abstractroutingdatasource抽象類用於實現資料來源的切換

package com.cpms.trasen.common.tk;

import org.slf4j.logger;

import org.slf4j.logge***ctory;

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

public class dynamicdatasource extends abstractroutingdatasource

}

ssm框架自帶的如事物、日誌、別名等配置這裡就不多說了,一搜一大把。這裡主要貼多資料來源相關的配置**。

(1)、資料原始檔properties檔案:我這裡都是sqlserver資料庫,如果有其他型別的資料庫,手動新增驅動、連線方式和使用者密碼就行。

#sqlserverdriver

driverclassname=com.microsoft.sqlserver.jdbc.sqlserverdriver

#datasourcea

datasourceaurl=jdbc:sqlserver://localhost:1433;databasename=trasen_clinicalpathmonitoring

datasourceauname=sa

datasourceapwd=1

#datasourceb

datasourceburl=jdbc:sqlserver:

datasourcebuname=sa

datasourcebpwd=1

(2)、spring-mybatis配置檔案:基本配置和多資料來源配置

<?xml version="1.0" encoding="utf-8"?>		$

$$ $ $

$ $

專案需求在使用者登入成功後,根據使用者切換對應的資料來源。博主就是直接寫在用於登入的service實現類的方法中,該方法呼叫了乙個webservice用於驗證使用者的登入資訊,所以執行緒不止乙個。在設定資料來源後的執行緒的生命週期,在切換資料來源之前結束了,進入了另乙個執行緒,所以獲取的資料來源為null導致切換失敗。最後,將設定資料來源的方法轉移到了驗證session過期的aop中,既主線程中,才成功切換資料來源。

呼叫設定資料來源的方法如下:資料來源字串也可設定為類變數,請根據應用場景進行設定。

// "***"為需要切換的資料來源字串,該字串為xml中配置的多資料來源id

datasourcecontextholder.setdatasourcetype("***");

每天積累一點,付出總會得到回報。

Spring MyBatis配置多資料來源

我此處用到的兩個資料庫都是oracle 1.首先修改資料庫的配置檔案,使得其有多個資料庫 2.配置spring的配置檔案 2.1資料庫1的spring配置 2.2資料庫2的spring配置 2.3配置多資料來源 這裡將兩個datasource配置到multipledatasource中,defaul...

Spring Mybatis多資料來源配置

1 在spring的配置檔案裡面,配置多個資料來源,我這裡配置兩個 beanid jobdatasource class com.alibaba.druid.pool.druiddatasource init method init destroy method close beanid xsdat...

spring mybatis多資料來源配置

應開發需求需要,根據專案業務,不同業務下的資料存入不同的資料庫中,且須讀寫分離。目前常用的有兩種方式 第一種 定義多個個資料庫連線,分別是areaddatasource,awritedatasource,breaddatasource,bwritedatasource,creaddatasource...