springboot配置多數據源(mysql、hive)

MyBatis-Plus 不能也不建議同時去“控制” Hive。它從設計到實現都假定底層是 支持事務、支持標準 SQL 方言關系型數據庫(MySQL、PostgreSQL、Oracle、SQL Server 等),而 Hive 兩者都不完全符合。如果操作兩個數據源都是mysql或者和關系數據庫的組合就可以了。以下主要介紹操作mysql和hive的方案。

1.引入依賴

//mysql的數據源
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version></dependency>//hive的依賴,我們這里用的星環的指定的本地的lib,其他可以直接根據公司的實際版本等情況去配置即可

2.添加配置yml

spring:datasource:mysql:url: jdbc:mysql://4555555:5555/sxxxx?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=falseusername: rootpassword: rorotdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSource  # 顯式指定hikari:# 最大連接數maximum-pool-size: 10# 最小空閑連接數minimum-idle: 5# 連接獲取超時時間(30秒)connection-timeout: 30000# 空閑超時時間(10分鐘)idle-timeout: 600000# 最大連接壽命(30分鐘)max-lifetime: 1800000pool-name: mysql-pool  # 連接池名稱(便于監控)hive:url: jdbc:hive2://your-hive-server:10000/defaultusername: hivepassword: hivedriver-class-name: org.apache.hive.jdbc.HiveDrivertype: com.zaxxer.hikari.HikariDataSource # 顯式指定hikari:# Hive連接數通常較少(查詢較慢)maximum-pool-size: 5# 最小空閑連接數minimum-idle: 2# Hive查詢可能較慢,適當延長超時connection-timeout: 60000# 空閑連接超時(5分鐘)idle-timeout: 300000# 最大連接壽命(30分鐘)max-lifetime: 1800000pool-name: hive-pool

3.添加配置類DataSourceConfig和MyBatisPlusConfig

先添加DataSourceConfig,主要是告知spring我們有兩個數據源,分別叫什么名稱(bean),并且我們的hive交給我們的jdbctemplate去管理。在添加MyBatisPlusConfig,主要是把mysql交給mybatisplus去控制

package com.sjztdz.selectprovincetrace.selecttrace.config;import com.zaxxer.hikari.HikariDataSource;
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.jdbc.core.JdbcTemplate;import javax.sql.DataSource;@Configuration
public class DataSourceConfig {// MySQL數據源配置@Bean("mysqlDataSource")@ConfigurationProperties(prefix="spring.datasource.mysql")public DataSource mysqlDataSource() {return DataSourceBuilder.create().type(HikariDataSource.class).build();}// Hive數據源配置@Bean("hiveDataSource")@ConfigurationProperties(prefix="spring.datasource.hive")public DataSource hiveDataSource() {return DataSourceBuilder.create().type(HikariDataSource.class).build();}// Hive配置jdbctemplate hive一般不需要事務@Bean("hiveJdbcTemplate")public JdbcTemplate hiveJdbcTemplate(@Qualifier("hiveDataSource") DataSource dataSource) {return new JdbcTemplate(dataSource);}}
package com.sjztdz.selectprovincetrace.selecttrace.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;/*** MySQL 專屬配置類* 1. 只掃 MySQL 的 Mapper 接口(@MapperScan)* 2. 給 MySQL 單獨建一個 SqlSessionFactory 和事務管理器* 3. 加載 MyBatis-Plus 分頁插件*/
@Configuration
@MapperScan(basePackages = "com.xxxxx.selecttrace.mapper", sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MyBatisPlusConfig {@Bean("mysqlSqlSessionFactory")public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {//用 MyBatis-Plus 自己的工廠bean,才能識別 MP 的注解和擴展MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();//告訴工廠用那個數據源--mysqlsessionFactory.setDataSource(dataSource);//告訴工廠去哪里找 XML 映射文件sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**.xml"));// 分頁插件MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));sessionFactory.setPlugins(interceptor);return sessionFactory.getObject();}/*** 給 MySQL 再配一個獨立的事務管理器* 以后在 Service 層想只控制 MySQL 事務時,寫:*   @Transactional("mysqlTransactionManager")* 就不會誤傷到 Hive 或其它數據源*/@Bean("mysqlTransactionManager")public PlatformTransactionManager mysqlTransactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}

注意@Qualifie的使用就針對多數個類去實現同一個接口時候,防止我們找錯!

4.使用

mysql-mybatis的使用

@Service
public class MysqlUserService {@Autowiredprivate UserMapper userMapper; // MyBatis-Plus Mapperpublic List<User> getUsers() {return userMapper.selectList(Wrappers.emptyWrapper());}public void addUser(User user) {userMapper.insert(user);}
}

hive-jdbcTemplate的使用

@Service
public class HiveQueryService {@Autowiredprivate JdbcTemplate hiveJdbcTemplate;public List<Map<String, Object>> queryHiveData(String sql) {return hiveJdbcTemplate.queryForList(sql);}public void executeHiveDDL(String ddl) {hiveJdbcTemplate.execute(ddl);}
}

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

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

相關文章

2025年上海市星光計劃第十一屆職業院校技能大賽高職組“信息安全管理與評估”賽項交換部分前6題詳解(僅供參考)

1.北京總公司和南京分公司有兩條裸纖采用了骨干鏈路配置,做必要的配置,只允許必要的Vlan 通過,不允許其他 Vlan 信息通過包含 Vlan1,禁止使用 trunk鏈路。 骨干鏈路位置??:總公司 SW 與分公司 AC 之間的兩條物理鏈路(Ethernet 1/0/5-6 必要 VLAN??: ?總公司:Vlan…

學習nginx location ~ .*.(js|css)?$語法規則

引言 nginx作為一款高性能的Web服務和反向代理服務&#xff0c;在網站性能優化中扮演著重要的角色。其中&#xff0c;location指令的正確配置是優化工作的關鍵之一。 這篇記錄主要解析location ~ .*\.(js|css)?$這一特定的語法規則&#xff0c;幫助大家理解其在nginx配置中的…

Nmap網絡掃描工具詳細使用教程

目錄 Nmap 主要功能 網絡存活主機發現 (ARP Ping Scan) 綜合信息收集掃描 (Stealth SYN Service OS) 全端口掃描 (Full Port Scan) NSE 漏洞腳本掃描 SMB 信息枚舉 HTTP 服務深度枚舉 SSH 安全審計 隱蔽掃描與防火墻規避 Nmap 主要功能 Nmap 主要有以下幾個核心功能…

Spring Boot 3.x 的 @EnableAsync應用實例

語法結構使用 EnableAsync 其實就像為你的應用穿上一件時尚的外套&#xff0c;簡單又高效&#xff01;只需在你的配置類上添加這個注解&#xff0c;輕松開啟異步之旅。代碼如下&#xff1a;想象一下&#xff0c;你的應用一瞬間變得靈活無比&#xff0c;像一個跳舞的機器人&…

Nginx Tomcat Jar包開機啟動自動配置

一、Nginx配置1、創建systemd nginx 服務文件vi /usr/lib/systemd/system/nginx.service### 內容[Unit] DescriptionThe nginx HTTP and reverse proxy server Afternetwork.target[Service] Typeforking ExecStartPre/mnt/nginx/sbin/nginx -t ExecStart/mnt/nginx/sbin/nginx…

修訂版!Uniapp從Vue3編譯到安卓環境踩坑記錄

Uniapp從Vue3編譯到安卓環境踩坑記錄 在使用Uniapp開發Vue3項目并編譯到安卓環境時&#xff0c;我遇到了不少問題&#xff0c;現將主要踩坑點及解決方案整理如下&#xff0c;供大家參考。 1. 動態導入與靜態導入問題 問題描述&#xff1a; 在Vue3項目中使用的動態導入語法在Uni…

零售消費企業的數字化增長實踐,2025新版下載

當下零售消費行業&#xff0c;早不是有貨就好賣的時代了。一方面&#xff0c;前兩年消費市場的熱度催生出大批新品牌入場&#xff0c;供給端瞬間擁擠&#xff1b;另一方面&#xff0c;消費者獲取信息越來越容易&#xff0c;新潮流、新觀念幾天一個變化。企業想穩住增長、必須要…

[網鼎杯 2020 青龍組]AreUSerialz

BUUCTF在線評測BUUCTF 是一個 CTF 競賽和訓練平臺&#xff0c;為各位 CTF 選手提供真實賽題在線復現等服務。https://buuoj.cn/challenges#[%E7%BD%91%E9%BC%8E%E6%9D%AF%202020%20%E9%9D%92%E9%BE%99%E7%BB%84]AreUSerialz啟動靶機&#xff0c;頁面顯示php代碼 <?phpincl…

貴州移動創維E900V22F-S905L3SB-全分區備份

貴州移動創維E900V22F-S905L3SB-全分區備份刷機教程&#xff1a;請查看壓縮包內教程&#xff01;下載地址&#xff1a;鏈接: https://pan.baidu.com/s/1EyYgLNZlxv-UvHpmTRxA_g?pwd5v8w 提取碼: 5v8w鏈接&#xff1a;https://www.123pan.com/s/Jbe8Vv-dTMN 提取碼:0123備用鏈接…

springboot redis 緩存入門與實戰

Spring Boot3 Redis 項目地址https://gitee.com/supervol/loong-springboot-study&#xff08;記得給個start&#xff0c;感謝&#xff09;Redis 介紹Redis 是一款高性能的 內存數據庫&#xff08;支持持久化&#xff09;&#xff0c;兼具緩存、NoSQL 存儲、分布式鎖等核心能力…

Redis緩存三大經典問題:雪崩、穿透、擊穿詳解

在高并發系統中&#xff0c;Redis作為高性能的內存緩存數據庫&#xff0c;緩存可能會引發一系列嚴重問題——緩存雪崩、緩存穿透、緩存擊穿。一、緩存雪崩&#xff08;Cache Avalanche&#xff09;1. 什么是緩存雪崩&#xff1f;緩存雪崩是指大量緩存數據在同一時間集中失效&am…

后端Web實戰-刪除修改

目錄 1.刪除員工 1.1.1 需求 1.1.2 接口文檔 1.1.3 思路分析 1.1.4 功能開發 1.1.4.1 Controller接收參數 1.1.4.2 Service 1.1.4.3 Mapper 1.1.5 功能測試 1.1.6 前后端聯調 2.修改員工 2.1 查詢回顯 2.1.1 接口文檔 2.1.2 實現思路 2.1.3 代碼實現 2.1.4 方式…

VNC連接服務器實現遠程桌面-針對官方給的鏈接已經失效問題

按照官方給的鏈接在安裝包的時候找不到鏈接&#xff0c;原鏈接可能已經失效新鏈接# 下載 libjpeg-turbo 官方 debwget --no-proxy "https://sourceforge.net/projects/libjpeg-turbo/files/2.0.90%20(2.1%20beta1)/libjpeg-turbo-official_2.0.90_amd64.deb/download"…

Docker在Windows與Linux系統安裝的一體化教學設計

Docker跨平臺安裝實訓課程設計 一、課程定位 本實訓課程面向計算機應用技術、云計算技術與應用等專業學生&#xff0c;通過對比學習Docker在Windows和Linux兩大主流操作系統上的安裝與配置方法&#xff0c;幫助學生掌握容器化技術的基礎環境搭建能力&#xff0c;為后續的容器管…

c++多線程(1)------創建和管理線程td::thread

操作系統&#xff1a;ubuntu22.04 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 std::thread 是 C11 標準庫中用于創建和管理線程的核心類&#xff0c;定義在 頭文件中。它使得多線程編程變得簡單、類型安全且跨平臺。 一、std::thread 簡介 std::thread 是一個類…

Flutter環境搭建全攻略之-windows環境搭建

一&#xff0c;Flutter 官網&#xff1a;https://flutter.dev Flutter Packages官網&#xff1a;https://pub.dev 二&#xff0c;Windows 上面搭建Flutter Android運行環境 對應軟件可以聯系客服&#xff0c;或者網盤里面下載 1&#xff0c;Flutter Android環境搭建&#xff1a…

《Docker 零基礎入門到實戰:容器化部署如此簡單,運維效率直接拉滿》

相信你對封面圖上的「Docker 鯨魚」圖標并不陌生 —— 它正是解決「開發環境能跑&#xff0c;生產環境崩了」的容器化神器&#xff01;Docker 通過打包應用與依賴到輕量容器&#xff0c;實現了「一次構建&#xff0c;到處運行」&#xff0c;徹底消除環境不一致的痛點。本文從 D…

Spring Security 深度學習(六): RESTful API 安全與 JWT

目錄 1. 引言&#xff1a;無狀態認證的崛起2. JWT (JSON Web Token) 核心概念2.1 什么是JWT&#xff1f;2.2 JWT的組成&#xff1a;Header, Payload, Signature2.3 JWT的工作原理2.4 JWT的優缺點與適用場景 3. Spring Security中的JWT集成策略3.1 禁用Session管理與CSRF防護3.2…

無名信號量

include <myhead.h> oid *task( void *file_size)int file_size1*(int*)file_size;//打開源文件int fdopen("./hello",O_RDONLY);if(fd-1){perror("open error\n");return NULL;}//打開目標文件int fd1open("./world",O_WRONLY);if(fd1-1)…

免費CRM系統與Excel客戶管理的區別

很多中小企業在客戶管理初期&#xff0c;會選擇使用Excel表格進行客戶數據的整理與維護。但隨著業務規模擴大&#xff0c;客戶信息日益復雜&#xff0c;Excel逐漸暴露出諸多局限性。此時&#xff0c;免費CRM系統應運而生&#xff0c;成為企業客戶管理升級的重要選擇。本文將深入…