Springboot結合JDBC實現雙數據源實例
更新時間:2023年12月10日 11:37:38 作者:慈祥的茶壺
這篇文章主要為大家介紹了Springboot結合JDBC實現雙數據源實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
配置文件
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注意:單個數據庫的配置為url,而在多個數據源的時候url可能啟動會報錯,需要使用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("動態(tài)獲取數據源{}",DatasourceUtil.getDB());
return DatasourceUtil.getDB();
}
}創(chuàng)建controller測試
@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的任務表
AssessmentTaskEntity assessmentTaskEntity = assessmentTaskMapper.selectById("1");
DatasourceUtil.clearDB();
User user = userMapper.selectById("1");
System.out.println("user = " + user);
return assessmentTaskEntity;
}以上就是Springboot結合JDBC實現雙數據源實例的詳細內容,更多關于Springboot JDBC雙數據源的資料請關注腳本之家其它相關文章!
相關文章
Java 序列化和Java反射的底層原理及區(qū)別對比分析
Java 序列化和反射是 Java 中兩個不同維度的機制,序列化聚焦對象的持久化與傳輸,反射聚焦類 / 對象的動態(tài)訪問與操作,二者底層原理和應用場景差異顯著,以下從底層原理、核心特性、區(qū)別對比展開解析,本文介紹Java 序列化和Java反射的底層原理及區(qū)別,感興趣的朋友一起看看吧2025-12-12
springboot如何獲取相對路徑文件夾下靜態(tài)資源的方法
這篇文章主要介紹了springboot如何獲取相對路徑文件夾下靜態(tài)資源的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05

