Spring 整合多資料源於MyBatis

2021-06-23 07:13:15 字數 1188 閱讀 6362

其實乙個工程多資料來源比較常見。

比如我們將所有工程中使用到的定時任務都持久化到同乙個資料庫,或者我們為工作流框架單獨提供乙個資料來源。

其實這些都好說,畢竟這些情況都是框架替我們做一些工作,我們幾乎沒有必要去訪問這些資料;或者框架已經提供了方便的api去訪問持久化資料,我們不用去考慮這方面的事情。

比較煩的情況是,乙個工程必須有多個資料來源,而且我們經常通過api訪問。

無論是使用orm框架還是jdbc或者sqltemplate,對於多個資料來源盡量保證相同的訪問方式,畢竟這些**到處都是,開發時誰都不想考慮對於哪個資料來源應該使用哪種訪問方式。

正好我本地的工程是用的mybatis,連線池使用dbcp,那就以這些為例,記錄一下多資料來源的配置。

(對於mybatis本身的配置就直接無視了,不同的org.mybatis.spring.sqlsessionfactorybean物件可以使用各自的mybatis配置也可以共享同乙個配置,看自己的需要了。)

先從配置資料來源開始,鑑於我用的是dbcp...算了,隨便配置乙個吧,具體引數看

下面是簡單配置:

接下來再弄個oracle的,太麻煩了,主要是bean id和一部分屬性不同,剩下的我們不需要關心:

兩種資料來源則兩種會話,我們需要兩個sqlsessionfactory,即:

接下來就是dao bean了,可能我會使用如下這種方式:

但這樣幾乎沒什麼實際意義,工程中的dao bean可能會很多,而且會繼續擴充套件下去。

於是,通常我們會這樣用,順便帶上另乙個資料來源:

可能有些人希望不同資料來源的dao bean存在於相同的package下,甚至不同資料來源的sql定義在相同的dao bean中。

我不知道應該如何實現這種效果,而且....用起來難道不混亂嗎?

剩下的就是transaction了,幾乎沒什麼特別的:

使用的時候需要注意,由於使用的是自動檢測dao bean的方式,即便不同資料來源的dao放在不同的package中也不能同名。

否則:org.springframework.context.annotation.conflictingbeandefinitionexception

Spring 整合多資料來源的mybatis

其實乙個工程多資料來源比較常見。比如我們將所有工程中使用到的定時任務都持久化到同乙個資料庫,或者我們為工作流框架單獨提供乙個資料來源。其實這些都好說,畢竟這些情況都是框架替我們做一些工作,我們幾乎沒有必要去訪問這些資料 或者框架已經提供了方便的api去訪問持久化資料,我們不用去考慮這方面的事情。比較...

spring 多資料來源

之前嘗試的乙個多資料來源切換的功能測試可以實現了,下面進行一下簡單的筆記 testservice 方法通過以下方式進行主動切換 dynamicdatasource 類 package com.utils import org.springframework.jdbc.datasource.looku...

springboot整合多資料來源

多資料來源產生的問題 事物管理 在實際專案中,怎麼樣搭建多資料來源 區分資料來源 舉個例子 2個資料來源 test001 test002 1 分包結構 com.baidu.test001 訪問test001資料庫 daoservice com.baidu.test002 訪問test002資料庫 d...