最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)源

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

之前配置的就不說了自行查看http://m.fzitv.net/article/233975.htm

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

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

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

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

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

需要重啟服務(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)文章

  • SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請(qǐng)求客戶端的實(shí)現(xiàn)

    SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請(qǐng)求客戶端的實(shí)現(xiàn)

    本文主要介紹了SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請(qǐng)求客戶端的實(shí)現(xiàn),文章詳細(xì)闡述了如何使用SpringBoot3的網(wǎng)絡(luò)請(qǐng)求客戶端進(jìn)行HTTP請(qǐng)求和處理響應(yīng),并提供了示例代碼和說明,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • mybatis?selectKey賦值未生效的原因分析

    mybatis?selectKey賦值未生效的原因分析

    這篇文章主要介紹了mybatis?selectKey賦值未生效的原因分析,selectKey 會(huì)將 SELECT LAST_INSERT_ID()的結(jié)果放入到傳入的實(shí)體類的主鍵里面,文中通過代碼示例給大家講解非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • springboot中不能獲取post請(qǐng)求參數(shù)的解決方法

    springboot中不能獲取post請(qǐng)求參數(shù)的解決方法

    這篇文章主要介紹了springboot中不能獲取post請(qǐng)求參數(shù)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Springboot有效防止XSS攻擊的幾種方法

    Springboot有效防止XSS攻擊的幾種方法

    本文介紹了在SpringBoot項(xiàng)目中防止XSS攻擊的多種方法,包括輸入驗(yàn)證和過濾、輸出編碼、使用安全框架、使用模板引擎的自動(dòng)轉(zhuǎn)義功能以及設(shè)置安全HTTP頭等,感興趣的可以了解一下
    2024-12-12
  • Windows10下的超詳細(xì)Java安裝全過程

    Windows10下的超詳細(xì)Java安裝全過程

    文章主要介紹了如何在Windows?10系統(tǒng)下安裝Java開發(fā)工具包(JDK),包括Java的下載與安裝步驟以及Java環(huán)境的配置方法,最后通過命令行驗(yàn)證Java環(huán)境是否配置成功
    2025-01-01
  • springboot log4j2不能打印框架錯(cuò)誤日志的解決方案

    springboot log4j2不能打印框架錯(cuò)誤日志的解決方案

    這篇文章主要介紹了springboot log4j2不能打印框架錯(cuò)誤日志的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring Boot拓展XML格式的請(qǐng)求和響應(yīng)操作過程

    Spring Boot拓展XML格式的請(qǐng)求和響應(yīng)操作過程

    在我們開發(fā)過程中,我們經(jīng)常使用的參數(shù)絕大多少事HTML和JSON格式的請(qǐng)求和響應(yīng)處理,但是我們?cè)趯?shí)際開發(fā)過程中,我們可能經(jīng)歷一些,比如對(duì)于XML格式的請(qǐng)求,本文給大家介紹Spring Boot拓展XML格式的請(qǐng)求和響應(yīng),感興趣的朋友一起看看吧
    2023-10-10
  • 深入講解Java 9中的九個(gè)新特性

    深入講解Java 9中的九個(gè)新特性

    Java 8 發(fā)布三年多之后,即將快到2017年7月下一個(gè)版本發(fā)布的日期了。 你可能已經(jīng)聽說過 Java 9 的模塊系統(tǒng),但是這個(gè)新版本還有許多其它的更新。 這里有九個(gè)令人興奮的新功能將與 Java 9 一起發(fā)布。需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-05-05
  • Java中Class類的作用與深入理解

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

    這篇文章主要介紹了Java中Class類的作用與深入理解的相關(guān)資料,希望通過本文能幫助到大家讓大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Java 模擬數(shù)據(jù)庫連接池的實(shí)現(xiàn)代碼

    Java 模擬數(shù)據(jù)庫連接池的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java 模擬數(shù)據(jù)庫連接池的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02

最新評(píng)論

湘潭县| 朝阳县| 泗水县| 延庆县| 安国市| 美姑县| 西贡区| 阳山县| 都兰县| 松潘县| 梁河县| 惠安县| 白沙| 喜德县| 江永县| 青河县| 大埔县| 定兴县| 横峰县| 冕宁县| 荃湾区| 新建县| 新安县| 沙田区| 朝阳区| 富蕴县| 英超| 枣强县| 正蓝旗| 平乡县| 凌源市| 长阳| 合作市| 双辽市| 故城县| 汉中市| 棋牌| 青铜峡市| 邯郸县| 砚山县| 益阳市|