Springboot結(jié)合JDBC實現(xiàn)雙數(shù)據(jù)源實例
配置文件
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
注意:單個數(shù)據(jù)庫的配置為url,而在多個數(shù)據(jù)源的時候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)獲取數(shù)據(jù)源{}",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的任務(wù)表 AssessmentTaskEntity assessmentTaskEntity = assessmentTaskMapper.selectById("1"); DatasourceUtil.clearDB(); User user = userMapper.selectById("1"); System.out.println("user = " + user); return assessmentTaskEntity; }
以上就是Springboot結(jié)合JDBC實現(xiàn)雙數(shù)據(jù)源實例的詳細內(nèi)容,更多關(guān)于Springboot JDBC雙數(shù)據(jù)源的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java?SpringBoot?@Async實現(xiàn)異步任務(wù)的流程分析
這篇文章主要介紹了Java?SpringBoot?@Async實現(xiàn)異步任務(wù),主要包括@Async?異步任務(wù)-無返回值,@Async?異步任務(wù)-有返回值,@Async?+?自定義線程池的操作代碼,需要的朋友可以參考下2022-12-12springboot開發(fā)flowable定時任務(wù)問題
這篇文章主要介紹了springboot開發(fā)flowable定時任務(wù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11關(guān)于SpringCloud的微服務(wù)結(jié)構(gòu)及微服務(wù)遠程調(diào)用
Spring Cloud 是一套完整的微服務(wù)解決方案,基于 Spring Boot 框架,準確的說,它不是一個框架,而是一個大的容器,它將市面上較好的微服務(wù)框架集成進來,從而簡化了開發(fā)者的代碼量,需要的朋友可以參考下2023-05-05SpringBoot結(jié)合WebSocket實現(xiàn)聊天功能
本文介紹了如何使用SpringBoot和WebSocket實現(xiàn)一個簡單的聊天功能,包括導(dǎo)入依賴、配置類、創(chuàng)建消息實體、指定ServerEndpoint、創(chuàng)建客戶端等步驟,通過具體示例,演示了如何發(fā)送個人消息和群發(fā)消息,實現(xiàn)了基本的聊天功能,適合需要在項目中實現(xiàn)實時通訊功能的開發(fā)者參考2024-11-11mybatis.type-aliases-package之巨坑的解決
這篇文章主要介紹了mybatis.type-aliases-package之巨坑的解決,具有很好的參考價值,希望對大家有所幫助。2021-09-09