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ù)庫的配置為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)文章!
相關(guān)文章
Java?SpringBoot?@Async實(shí)現(xiàn)異步任務(wù)的流程分析
這篇文章主要介紹了Java?SpringBoot?@Async實(shí)現(xiàn)異步任務(wù),主要包括@Async?異步任務(wù)-無返回值,@Async?異步任務(wù)-有返回值,@Async?+?自定義線程池的操作代碼,需要的朋友可以參考下2022-12-12基于Java驗(yàn)證jwt token代碼實(shí)例
這篇文章主要介紹了基于Java驗(yàn)證jwt token代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12SpringMVC @NotNull校驗(yàn)不生效的解決方案
這篇文章主要介紹了SpringMVC @NotNull校驗(yàn)不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09springboot開發(fā)flowable定時(shí)任務(wù)問題
這篇文章主要介紹了springboot開發(fā)flowable定時(shí)任務(wù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11maven打包時(shí)候修改包名稱帶上git版本號(hào)和打包時(shí)間方式
這篇文章主要介紹了maven打包時(shí)候修改包名稱帶上git版本號(hào)和打包時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04關(guān)于SpringCloud的微服務(wù)結(jié)構(gòu)及微服務(wù)遠(yuǎn)程調(diào)用
Spring Cloud 是一套完整的微服務(wù)解決方案,基于 Spring Boot 框架,準(zhǔn)確的說,它不是一個(gè)框架,而是一個(gè)大的容器,它將市面上較好的微服務(wù)框架集成進(jìn)來,從而簡(jiǎn)化了開發(fā)者的代碼量,需要的朋友可以參考下2023-05-05SpringBoot結(jié)合WebSocket實(shí)現(xiàn)聊天功能
本文介紹了如何使用SpringBoot和WebSocket實(shí)現(xiàn)一個(gè)簡(jiǎn)單的聊天功能,包括導(dǎo)入依賴、配置類、創(chuàng)建消息實(shí)體、指定ServerEndpoint、創(chuàng)建客戶端等步驟,通過具體示例,演示了如何發(fā)送個(gè)人消息和群發(fā)消息,實(shí)現(xiàn)了基本的聊天功能,適合需要在項(xiàng)目中實(shí)現(xiàn)實(shí)時(shí)通訊功能的開發(fā)者參考2024-11-11mybatis.type-aliases-package之巨坑的解決
這篇文章主要介紹了mybatis.type-aliases-package之巨坑的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-09-09