(詳細)Springboot 整合動態多數據源 這里有mysql(分為master 和 slave) 和oracle,根據不同路徑適配不同數據源

文章目錄

    • Springboot 整合多動態數據源 這里有mysql(分為master 和 slave) 和oracle
      • 1. 引入相關的依賴
      • 2. 創建相關配置文件
      • 3. 在相關目錄下進行編碼,不同路徑會使用不同數據源

Springboot 整合多動態數據源 這里有mysql(分為master 和 slave) 和oracle

1. 引入相關的依賴

  <!--動態數據源--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${dynamic-datasource.version}</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- oracle --><dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc6</artifactId><version>${ojdbc.version}</version></dependency>

2. 創建相關配置文件

package com.aspire.sc.base.data.config;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Qualifier;//import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;@Configuration
public class DataSourceConfig {@Bean(name = "master")@Qualifier("master")@Primary@ConfigurationProperties(prefix="spring.datasource.dynamic.datasource.master")public DataSource primaryDataSource(){return DataSourceBuilder.create().build();}@Bean(name = "slave")@Qualifier("slave")@ConfigurationProperties(prefix="spring.datasource.dynamic.datasource.slave")public DataSource slave(){return DataSourceBuilder.create().build();}@Bean(name = "oracleDataSource")@Qualifier("oracleDataSource")@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.oracle")public DataSource oracleDataSource(){return DataSourceBuilder.create().build();}}
package com.aspire.sc.base.data.config;import com.aspire.common.dictenum.DictBaseEnum;
import com.aspire.common.dictenum.DictBaseItem;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;/*** 數據庫leadnews_article*/
@Configuration
public class MysqlDataSourceConfig {@Bean@Primarypublic SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("master") DataSource dataSource) throws Exception {return createSqlSessionFactory(dataSource);}@Beanpublic SqlSessionFactory mysqlSlaveSqlSessionFactory(@Qualifier("slave") DataSource dataSource) throws Exception {return createSqlSessionFactory(dataSource);}private SqlSessionFactory createSqlSessionFactory(DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();sqlSessionFactory.setDataSource(dataSource);MybatisConfiguration configuration = new MybatisConfiguration();configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);configuration.setCacheEnabled(false);// 添加分頁功能PaginationInterceptor paginationInterceptor = new PaginationInterceptor();sqlSessionFactory.setPlugins(new Interceptor[]{paginationInterceptor});sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*/*.xml"));sqlSessionFactory.setTypeHandlersPackage("com.aspire.common.constant");sqlSessionFactory.setTypeEnumsPackage("com.aspire.common.constant," +"com.aspire.sc.base.data.domain.*.pojo," +"com.aspire.sc.base.data.constant");return sqlSessionFactory.getObject();}@Bean@Primarypublic SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean(name = "masterTransactionManager")@Primarypublic DataSourceTransactionManager masterTransactionManager(@Qualifier("master") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "slaveTransactionManager")public DataSourceTransactionManager slaveTransactionManager(@Qualifier("slave") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}
package com.aspire.sc.base.data.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
//@MapperScan(basePackages = "com.aspire.sc.base.data.oracledomain.*", sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDataSourceConfig {@Bean(name = "oracleSqlSessionFactory")public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();sqlSessionFactory.setDataSource(dataSource);sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:oraclemapper/*.xml"));return sqlSessionFactory.getObject();}@Beanpublic SqlSessionTemplate oracleSqlSessionTemplate(@Qualifier("oracleSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean(name = "oracleTransactionManager")public DataSourceTransactionManager oracleTransactionManager(@Qualifier("oracleDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}

啟動文件加上:

import com.baomidou.dynamic.datasource.plugin.MasterSlaveAutoRoutingPlugin;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;/*** @author wanggh*/
@EnableConfigurationProperties
@ComponentScan({"com.aspire"})
@EnableTransactionManagement(proxyTargetClass = true)@MapperScan(basePackages = {"com.aspire.sc.base.data.domain.*.mapper"}, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
@MapperScan(basePackages = {"com.aspire.sc.base.data.oracledomain.mapper"}, sqlSessionFactoryRef = "oracleSqlSessionFactory")
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@ServletComponentScan
@EnableCaching
public class MsBaseDataApplication {public static void main(String[] args) {SpringApplication.run(MsBaseDataApplication.class, args);}/*** 純的讀寫分離環境,寫操作全部是master,讀操作全部是slave* 默認主庫名稱master,從庫名稱slave。* 不用加@DS注解*/@Beanpublic MasterSlaveAutoRoutingPlugin masterSlaveAutoRoutingPlugin() {return new MasterSlaveAutoRoutingPlugin();}}

3. 在相關目錄下進行編碼,不同路徑會使用不同數據源

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67370.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡之計算機網絡的分類

計算機網絡可以根據不同的角度進行分類&#xff0c;以下是幾種常見的分類方式&#xff1a; 1. 按照規模和范圍&#xff1a; 局域網&#xff08;LAN&#xff0c;Local Area Network&#xff09;&#xff1a;覆蓋較小范圍&#xff08;例如一個建筑物或校園&#xff09;&#xf…

騰訊云開發提供免費GPU服務

https://ide.cloud.tencent.com/dashboard/web 適用于推理場景&#xff0c;每個月10000分鐘免費時長 166 小時 40 分鐘 自帶學術加速&#xff0c;速度還是不錯的 白嫖 Tesla T4 16G 算力 顯存&#xff1a;16GB 算力&#xff1a;8 TFlops SP CPU&#xff1a;8 核 內存&#…

國內外大語言模型領域發展現狀與預期

在數字化浪潮中&#xff0c;大語言模型已成為人工智能領域的關鍵力量&#xff0c;深刻影響著各個行業的發展軌跡。下面我們將深入探討國內外大語言模型領域的發展現狀以及未來預期。 一、發展現狀 &#xff08;一&#xff09;國外進展 美國的引領地位&#xff1a;OpenAI 的 …

存儲過程優化實踐:統一返回結構、參數 JSON 化與事務原子化

存儲過程作為數據庫中執行復雜業務邏輯的重要工具&#xff0c;在提升性能、保障數據一致性和簡化維護方面發揮著重要作用。然而&#xff0c;隨著應用程序和數據的復雜度不斷增加&#xff0c;存儲過程也面臨著性能瓶頸、維護難度和擴展性問題。為了應對這些挑戰&#xff0c;優化…

Lustre Core 語法 - 布爾表達式

Lustre v6 中的 Lustre Core 部分支持的表達式種類中&#xff0c;支持布爾表達式。相關的表達式包括and, or, xor, not, #, nor。 相應的文法定義為 Expression :: not Expression| Expression and Expression| Expression or Expression | Expression xor Expression | # (…

DeepSeek--通向通用人工智能的深度探索者

一、詞源與全稱 “DeepSeek"由"Deep”&#xff08;深度&#xff09;與"Seek"&#xff08;探索&#xff09;組合而成&#xff0c;中文譯名為"深度求索"。其全稱為"深度求索人工智能基礎技術研究有限公司"&#xff0c;英文對應"De…

模板生成引擎技術介紹

模板生成引擎技術介紹 什么是模板生成引擎&#xff1f; 模板生成引擎是一種用于將數據與預定義的格式相結合&#xff0c;以生成最終文檔或網頁的技術。它允許開發者通過定義模板和填充數據來自動化內容創建過程。這種技術廣泛應用于網站開發、報告生成、電子郵件定制等多個領…

第 5 章:聲音與音樂系統

5.1 聲音效果的應用 在游戲中&#xff0c;聲音效果是增強游戲沉浸感和趣味性的重要元素。Pygame 提供了強大的音頻處理功能&#xff0c;使得添加各種聲音效果變得相對簡單。聲音效果可以包括角色的動作音效&#xff0c;如跳躍、攻擊、受傷時的聲音&#xff1b;環境音效&#x…

matlab中,fill命令用法

在 MATLAB 中&#xff0c;fill 命令用于創建填充多邊形的圖形對象。使用 fill 可以在二維坐標系中繪制填充的區域&#xff0c;通常用于繪制圖形的背景或顯示數據分布。 基本語法 fill(X, Y, C)X 和 Y 是同樣長度的向量&#xff0c;定義了多邊形的頂點坐標。C 是顏色&#xff0…

ChatGPT 搜索測試整合記憶功能

據 TestingCatalog 報道&#xff0c;OpenAI 正在測試 ChatGPT 搜索的整合記憶功能&#xff0c;被命名為 “Memory in search”2。以下是關于該功能的具體情況123&#xff1a; 功能特點 個性化搜索&#xff1a;啟用該功能后&#xff0c;ChatGPT 能利用存儲的記憶數據&#xff0…

新站如何快速獲得搜索引擎收錄?

本文來自&#xff1a;百萬收錄網 原文鏈接&#xff1a;https://www.baiwanshoulu.com/8.html 新站想要快速獲得搜索引擎收錄&#xff0c;需要采取一系列有針對性的策略。以下是一些具體的建議&#xff1a; 一、網站內容優化 高質量原創內容&#xff1a; 確保網站內容原創、…

指定dpkg安裝deb包時的安裝路徑

通過install和ctonrol文件設置安裝路徑 在使用dpkg安裝.deb包時&#xff0c;一般不能直接指定安裝路徑&#xff0c;因為.deb包內部已經定義了文件的安裝位置。這些位置是在打包.deb包時通過控制文件&#xff08;通常是debian/control和debian/install等文件&#xff09;指定的…

開發者交流平臺項目部署到阿里云服務器教程

本文使用PuTTY軟件在本地Windows系統遠程控制Linux服務器&#xff1b;其中&#xff0c;Windows系統為Windows 10專業版&#xff0c;Linux系統為CentOS 7.6 64位。 1.工具軟件的準備 maven&#xff1a;https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-m…

汽車定速巡航

配備定速巡航功能的車型&#xff0c;一般在方向盤附近設有4~6個按鍵&#xff08;可能共用鍵位&#xff09;。 要設置定速巡航&#xff0c;不僅需要方向盤上的按鍵&#xff0c;還要油門配合。 設置的一般流程&#xff1a; 開關&#xff1a;類似步槍上的“保險”&#xff0c;按…

C++11中array容器的常見用法

文章目錄 一、概述二、std::array的特點三、std::array的定義與初始化三、std::array的常用成員函數四、與 C 風格數組的互操作 一、概述 在 C11 中&#xff0c;std::array 是一個新的容器類型&#xff0c;它提供了一個固定大小的數組封裝。相比傳統的 C 風格數組&#xff0c;…

Vue 響應式渲染 - 待辦事項簡單實現

Vue 漸進式JavaScript 框架 基于Vue2的學習筆記 - Vue 響應式渲染 - 待辦事項簡單實現 目錄 待辦事項簡單實現 頁面初始化 雙向綁定的指令 增加留言列表設置 增加刪除按鈕 最后優化 總結 待辦事項簡單實現 頁面初始化 對頁面進行vue的引入、創建輸入框和按鈕及實例化V…

中文輸入法方案

使用了三年的自然碼雙拼&#xff0c;毫無疑問是推薦使用雙拼輸入法。 三年積累下來的習慣是&#xff1a; 1 自然碼方案 2 空格出字 字母選字 直到如今&#xff0c;想要做出改變&#xff0c;是因為這樣的方案帶來的痛點&#xff1a; 1 使用空格出字就無法使用輔助碼&#…

scrol家族 offset家族 client家族學習

Scroll 系列屬性 scrollTop & scrollLeft scrollTop: 返回元素的內容已向上滾動的部分的高度。scrollLeft: 返回元素的內容已向左滾動的部分的寬度。 scrollHeight & scrollWidth scrollHeight: 返回元素的實際高度&#xff0c;包括由于溢出而在屏幕上不可見的內容…

Python 函數魔法書:基礎、范例、避坑、測驗與項目實戰

Python 函數魔法書&#xff1a;基礎、范例、避坑、測驗與項目實戰 內容簡介 本系列文章是為 Python3 學習者精心設計的一套全面、實用的學習指南&#xff0c;旨在幫助讀者從基礎入門到項目實戰&#xff0c;全面提升編程能力。文章結構由 5 個版塊組成&#xff0c;內容層層遞進…

在Windows系統中本地部署屬于自己的大語言模型(Ollama + open-webui + deepseek-r1)

文章目錄 1 在Windows系統中安裝Ollama&#xff0c;并成功啟動&#xff1b;2 非docker方式安裝open-webui3下載并部署模型deepseek-r1 Ollama Ollama 是一個命令行工具&#xff0c;用于管理和運行機器學習模型。它簡化了模型的下載與部署&#xff0c;支持跨平臺使用&#xff0c…