欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot結(jié)合JDBC實(shí)現(xiàn)雙數(shù)據(jù)源實(shí)例

 更新時(shí)間:2023年12月10日 11:37:38   作者:慈祥的茶壺  
這篇文章主要為大家介紹了Springboot結(jié)合JDBC實(shí)現(xiàn)雙數(shù)據(jù)源實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

配置文件

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ù)的流程分析

    這篇文章主要介紹了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í)例

    這篇文章主要介紹了基于Java驗(yàn)證jwt token代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringMVC @NotNull校驗(yàn)不生效的解決方案

    SpringMVC @NotNull校驗(yàn)不生效的解決方案

    這篇文章主要介紹了SpringMVC @NotNull校驗(yàn)不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springboot開發(fā)flowable定時(shí)任務(wù)問題

    springboot開發(fā)flowable定時(shí)任務(wù)問題

    這篇文章主要介紹了springboot開發(fā)flowable定時(shí)任務(wù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • maven打包時(shí)候修改包名稱帶上git版本號(hào)和打包時(shí)間方式

    maven打包時(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)用

    關(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-05
  • java中的transient關(guān)鍵字解讀

    java中的transient關(guān)鍵字解讀

    這篇文章主要介紹了java中的transient關(guān)鍵字解讀,transient關(guān)鍵字的主要作用就是讓某些被transient關(guān)鍵字修飾的成員屬性變量不被序列化,實(shí)際上也正是因此,在學(xué)習(xí)過程中很少用得上序列化操作,一般都是在實(shí)際開發(fā)中,需要的朋友可以參考下
    2023-09-09
  • SpringBoot結(jié)合WebSocket實(shí)現(xiàn)聊天功能

    SpringBoot結(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-11
  • Java中Class類的作用與深入理解

    Java中Class類的作用與深入理解

    這篇文章主要介紹了Java中Class類的作用與深入理解的相關(guān)資料,希望通過本文能幫助到大家讓大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • mybatis.type-aliases-package之巨坑的解決

    mybatis.type-aliases-package之巨坑的解決

    這篇文章主要介紹了mybatis.type-aliases-package之巨坑的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2021-09-09

最新評(píng)論