亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot+dynamicDataSource動(dòng)態(tài)添加切換數(shù)據(jù)源方式

 更新時(shí)間:2022年01月07日 14:27:17   作者:惡犬的二哈哈  
這篇文章主要介紹了springboot+dynamicDataSource動(dòng)態(tài)添加切換數(shù)據(jù)源方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot dynamicDataSource動(dòng)態(tài)添加切換數(shù)據(jù)源

之前有篇寫(xiě)了切換數(shù)據(jù)源的方法,那些可以在yml中配置固定的幾個(gè)數(shù)據(jù)源進(jìn)行切換后面需要新需求 在數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查數(shù)據(jù)源 然后連。

之前配置的就不說(shuō)了自行查看http://chabaoo.cn/article/233975.htm

1.修改初始加載的數(shù)據(jù)源map

之前傳獲取的tagetData是直接讀取yml中的多個(gè)數(shù)據(jù)源。此時(shí)我寫(xiě)了dataTest方法調(diào)用主數(shù)據(jù)直接查詢數(shù)據(jù)庫(kù)里的某張表 并把表中內(nèi)容加載成一個(gè)個(gè)數(shù)據(jù)源放到map中

2.此時(shí)一開(kāi)始的時(shí)候就會(huì)加載數(shù)據(jù)庫(kù)中的

一張表的數(shù)據(jù)信息作為數(shù)據(jù)源。

3.但是發(fā)現(xiàn)新增數(shù)據(jù)源或修改數(shù)據(jù)源時(shí)無(wú)法操作

需要重啟服務(wù),后面發(fā)現(xiàn)DynamicDataSource中有一個(gè)Map變量用于存儲(chǔ)數(shù)據(jù)源,在調(diào)用其構(gòu)造函數(shù)時(shí)候有進(jìn)行加載

只要修改了這個(gè)map那么新增或者修改的map也可以生效了,完結(jié)。

dynamicDataSource動(dòng)態(tài)添加移除數(shù)據(jù)源

數(shù)據(jù)源model

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class DataSourceDTO {
    @NotBlank
    @ApiModelProperty(value = "連接池名稱", example = "db1")
    private String poolName;
    @NotBlank
    @ApiModelProperty(value = "JDBC driver", example = "com.mysql.cj.jdbc.Driver")
    private String driverClassName;
    @NotBlank
    @ApiModelProperty(value = "JDBC url 地址", example = "jdbc:mysql://x.x.x.x:3306/x?useUnicode=true&characterEncoding=utf-8")
    private String url;
    @NotBlank
    @ApiModelProperty(value = "JDBC 用戶名", example = "sa")
    private String username;
    @ApiModelProperty(value = "JDBC 密碼")
    private String password;
}

切換接口

import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.creator.*;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
import com.lets.web.vo.common.DataSourceDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
 
import javax.sql.DataSource;
import java.util.Set;
 
@RestController
@RequestMapping("/datasources")
@Api(tags = "添加刪除數(shù)據(jù)源")
public class DataSourceController {
 
    @Autowired
    private DataSource dataSource;
    @Autowired
    private DefaultDataSourceCreator dataSourceCreator;
    @Autowired
    private DruidDataSourceCreator druidDataSourceCreator;
    @Autowired
    private HikariDataSourceCreator hikariDataSourceCreator;
 
    @GetMapping
    @ApiOperation("獲取當(dāng)前所有數(shù)據(jù)源")
    public Set<String> now() {
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        return ds.getDataSources().keySet();
    }
 
    //通用數(shù)據(jù)源會(huì)根據(jù)maven中配置的連接池根據(jù)順序依次選擇。
    //默認(rèn)的順序?yàn)閐ruid>hikaricp>beecp>dbcp>spring basic
    @PostMapping("/add")
    @ApiOperation("通用添加數(shù)據(jù)源(推薦)")
    public Set<String> add(@Validated @RequestBody DataSourceDTO dto) {
        DataSourceProperty dataSourceProperty = new DataSourceProperty();
        BeanUtils.copyProperties(dto, dataSourceProperty);
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        DataSource dataSource = dataSourceCreator.createDataSource(dataSourceProperty);
        ds.addDataSource(dto.getPoolName(), dataSource);
        return ds.getDataSources().keySet();
    }
 
    @PostMapping("/addDruid")
    @ApiOperation("基礎(chǔ)Druid數(shù)據(jù)源")
    public Set<String> addDruid(@Validated @RequestBody DataSourceDTO dto) {
        DataSourceProperty dataSourceProperty = new DataSourceProperty();
        BeanUtils.copyProperties(dto, dataSourceProperty);
        dataSourceProperty.setLazy(true);
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        DataSource dataSource = druidDataSourceCreator.createDataSource(dataSourceProperty);
        ds.addDataSource(dto.getPoolName(), dataSource);
        return ds.getDataSources().keySet();
    }
 
    @PostMapping("/addHikariCP")
    @ApiOperation("基礎(chǔ)HikariCP數(shù)據(jù)源")
    public Set<String> addHikariCP(@Validated @RequestBody DataSourceDTO dto) {
        DataSourceProperty dataSourceProperty = new DataSourceProperty();
        BeanUtils.copyProperties(dto, dataSourceProperty);
        dataSourceProperty.setLazy(true);//3.4.0版本以下如果有此屬性,需手動(dòng)設(shè)置,不然會(huì)空指針。
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        DataSource dataSource = hikariDataSourceCreator.createDataSource(dataSourceProperty);
        ds.addDataSource(dto.getPoolName(), dataSource);
        return ds.getDataSources().keySet();
    }
 
    @DeleteMapping
    @ApiOperation("刪除數(shù)據(jù)源")
    public String remove(String name) {
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        ds.removeDataSource(name);
        return "刪除成功";
    }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JVM內(nèi)存參數(shù)配置詳解

    JVM內(nèi)存參數(shù)配置詳解

    本文主要介紹了JVM內(nèi)存參數(shù)配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java?不同版本的?Switch語(yǔ)句

    Java?不同版本的?Switch語(yǔ)句

    本文主要介紹了Java不同版本的Switch語(yǔ)句,自Java13以來(lái),Switch表達(dá)式就被添加到Java核心庫(kù)中,下面我們將介紹舊的Java?Switch語(yǔ)句和新的Switch語(yǔ)句的區(qū)別,需要的朋友可以參考一下
    2022-06-06
  • Mybatis實(shí)現(xiàn)動(dòng)態(tài)SQL編寫(xiě)詳細(xì)代碼示例

    Mybatis實(shí)現(xiàn)動(dòng)態(tài)SQL編寫(xiě)詳細(xì)代碼示例

    這篇文章主要為大家詳細(xì)介紹了Mybatis中動(dòng)態(tài)SQL的編寫(xiě)使用,動(dòng)態(tài)SQL技術(shù)是一種根據(jù)特定條件動(dòng)態(tài)拼裝SQL語(yǔ)句的功能,它存在的意義是為了解決拼接SQL語(yǔ)句字符串時(shí)的痛點(diǎn)問(wèn)題,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • 關(guān)于Android觸摸事件分發(fā)的原理詳析

    關(guān)于Android觸摸事件分發(fā)的原理詳析

    觸摸事件分發(fā)機(jī)制一直以來(lái)都是Android中比較重要的一大塊,自定義view,各種復(fù)雜的自定義手勢(shì)交互都與觸摸事件分發(fā)機(jī)制關(guān)系密,下面這篇文章主要給大家介紹了關(guān)于Android觸摸事件分發(fā)原理的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Spring Boot Web 開(kāi)發(fā)注解篇

    Spring Boot Web 開(kāi)發(fā)注解篇

    在 Spring Boot 快速入門(mén)中,只要在 pom.xml 加入了 spring-boot-starter-web 依賴,即可快速開(kāi)發(fā) web 應(yīng)用。下文給大家詳細(xì)介紹了spring boot web 開(kāi)發(fā)注解,感興趣的朋友參考下吧
    2017-08-08
  • 在SpringBoot中通過(guò)jasypt進(jìn)行加密解密的方法

    在SpringBoot中通過(guò)jasypt進(jìn)行加密解密的方法

    今天小編就為大家分享一篇關(guān)于在SpringBoot中通過(guò)jasypt進(jìn)行加密解密的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Java通過(guò)SSM完成水果商城批發(fā)平臺(tái)流程

    Java通過(guò)SSM完成水果商城批發(fā)平臺(tái)流程

    這是一個(gè)使用了java+SSM開(kāi)發(fā)的網(wǎng)上水果商城批發(fā)平臺(tái),是一個(gè)實(shí)戰(zhàn)小練習(xí),具有水果商城批發(fā)該有的所有功能,感興趣的朋友快來(lái)看看吧
    2022-06-06
  • Java枚舉類使用Lombok方式

    Java枚舉類使用Lombok方式

    這篇文章主要介紹了Java枚舉類使用Lombok方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 淺談Spring的屬性編輯器的使用

    淺談Spring的屬性編輯器的使用

    這篇文章主要介紹了淺談Spring的屬性編輯器的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 淺談java+內(nèi)存分配及變量存儲(chǔ)位置的區(qū)別

    淺談java+內(nèi)存分配及變量存儲(chǔ)位置的區(qū)別

    下面小編就為大家?guī)?lái)一篇淺談java+內(nèi)存分配及變量存儲(chǔ)位置的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08

最新評(píng)論