Springboot結(jié)合JDBC實(shí)現(xiàn)雙數(shù)據(jù)源實(shí)例
配置文件
spring:
application:
name: tuberculosis
datasource:
tuberculosis:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/tuberculosis?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5
maximum-pool-size: 100
auto-commit: true
idle-timeout: 30000
pool-name: DatabookHikariCP
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1
jkjc:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/jkjc?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5
maximum-pool-size: 100
auto-commit: true
idle-timeout: 30000
pool-name: DatabookHikariCP
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1注意:?jiǎn)蝹€(gè)數(shù)據(jù)庫(kù)的配置為url,而在多個(gè)數(shù)據(jù)源的時(shí)候url可能啟動(dòng)會(huì)報(bào)錯(cuò),需要使用jdbc-url
配置類
package com.daryl.config.db;
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.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
/**
* @author daryl
* @create 2023/12/08
*/
@Component
public class DataSourceConfig {
@Bean(name = "tuberculosis")
@ConfigurationProperties(prefix = "spring.datasource.tuberculosis")
public DataSource dataSourceOne() {
return DataSourceBuilder.create().build();
}
@Bean(name = "jkjc")
@ConfigurationProperties(prefix = "spring.datasource.jkjc")
public DataSource dataSourceTwo() {
return DataSourceBuilder.create().build();
}
@Bean("dynamicDatasource")
@Primary
public DataSource dynamicDataSource(@Qualifier("tuberculosis") DataSource tuberculosis,@Qualifier("jkjc") DataSource jkjc) {
DynamicDatasource dynamicDatasource = new DynamicDatasource();
dynamicDatasource.setDefaultTargetDataSource(tuberculosis);
HashMap<Object, Object> dsMap = new HashMap<>();
dsMap.put("tuberculosis", tuberculosis);
dsMap.put("jkjc", jkjc);
dynamicDatasource.setTargetDataSources(dsMap);
return dynamicDatasource;
}
@Bean
public PlatformTransactionManager transactionManager(@Qualifier("dynamicDatasource") DataSource dynamicDatasource) {
return new DataSourceTransactionManager(dynamicDatasource);
}
}package com.daryl.config.db;
/**
* @author daryl
* @create 2023/12/08
*/
public class DatasourceUtil {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setDB(String dbType) {
contextHolder.set(dbType);
}
public static String getDB() {
return contextHolder.get();
}
public static void clearDB() {
contextHolder.remove();
}
}package com.daryl.config.db;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
/**
* @author daryl
* @create 2023/12/08
*/
public class DynamicDatasource extends AbstractRoutingDataSource {
private static final Logger LOGGER = LoggerFactory.getLogger(DynamicDatasource.class);
@Override
protected Object determineCurrentLookupKey() {
LOGGER.debug("動(dòng)態(tài)獲取數(shù)據(jù)源{}",DatasourceUtil.getDB());
return DatasourceUtil.getDB();
}
}創(chuàng)建controller測(cè)試
@RequestMapping("/db1")
public Object db1(@RequestBody HashMap<String, String> map) {
//db1的用戶表
return userMapper.selectById(map.get("id"));
}@RequestMapping("/db2")
public Object db2() {
DatasourceUtil.setDB("jkjc");
//db2的任務(wù)表
AssessmentTaskEntity assessmentTaskEntity = assessmentTaskMapper.selectById("1");
DatasourceUtil.clearDB();
User user = userMapper.selectById("1");
System.out.println("user = " + user);
return assessmentTaskEntity;
}以上就是Springboot結(jié)合JDBC實(shí)現(xiàn)雙數(shù)據(jù)源實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于Springboot JDBC雙數(shù)據(jù)源的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫(kù)分表
- SpringBoot封裝JDBC的實(shí)現(xiàn)步驟
- SpringBoot整合sharding-jdbc實(shí)現(xiàn)自定義分庫(kù)分表的實(shí)踐
- SpringBoot整合sharding-jdbc實(shí)現(xiàn)分庫(kù)分表與讀寫分離的示例
- springboot+springJdbc+postgresql 實(shí)現(xiàn)多數(shù)據(jù)源的配置
- springboot整合shardingjdbc實(shí)現(xiàn)分庫(kù)分表最簡(jiǎn)單demo
相關(guān)文章
如何讓W(xué)in10實(shí)現(xiàn)Java文件的開機(jī)自啟動(dòng)
這篇文章主要介紹了如何讓W(xué)in10實(shí)現(xiàn)Java文件的開機(jī)自啟動(dòng),對(duì)于一些想要一直運(yùn)行的Java文件,就會(huì)造成每次系統(tǒng)更新之后的重啟導(dǎo)致Java文件無法繼續(xù)運(yùn)行。,需要的朋友可以參考下2019-06-06
mybatis攔截器實(shí)現(xiàn)通用權(quán)限字段添加的方法
這篇文章主要給大家介紹了關(guān)于mybatis攔截器實(shí)現(xiàn)通用權(quán)限字段添加的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Netty實(shí)戰(zhàn)入門教程之?什么是Netty
Java中支持三種網(wǎng)絡(luò)編程IO模型,BIO、NIO、AIO,Netty對(duì)NIO又做了一層封裝,本文帶領(lǐng)我們了解Netty到底是什么,Netty入門案例,感興趣的朋友跟隨小編一起看看吧2022-02-02
java8 stream 如何打印數(shù)據(jù)元素
這篇文章主要介紹了java8 stream 如何打印數(shù)據(jù)元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
idea 設(shè)置鼠標(biāo)懸停(放上)彈出注釋的方法
這篇文章主要介紹了idea 設(shè)置鼠標(biāo)懸停(放上)彈出注釋的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Java 序列化和Java反射的底層原理及區(qū)別對(duì)比分析
Java 序列化和反射是 Java 中兩個(gè)不同維度的機(jī)制,序列化聚焦對(duì)象的持久化與傳輸,反射聚焦類 / 對(duì)象的動(dòng)態(tài)訪問與操作,二者底層原理和應(yīng)用場(chǎng)景差異顯著,以下從底層原理、核心特性、區(qū)別對(duì)比展開解析,本文介紹Java 序列化和Java反射的底層原理及區(qū)別,感興趣的朋友一起看看吧2025-12-12
springboot如何獲取相對(duì)路徑文件夾下靜態(tài)資源的方法
這篇文章主要介紹了springboot如何獲取相對(duì)路徑文件夾下靜態(tài)資源的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05

