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

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

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

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

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

之前配置的就不說了自行查看http://www.dbjr.com.cn/article/233975.htm

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

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

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

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

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

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

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

dynamicDataSource動態(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("獲取當前所有數(shù)據(jù)源")
    public Set<String> now() {
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        return ds.getDataSources().keySet();
    }
 
    //通用數(shù)據(jù)源會根據(jù)maven中配置的連接池根據(jù)順序依次選擇。
    //默認的順序為druid>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("基礎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("基礎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版本以下如果有此屬性,需手動設置,不然會空指針。
        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 "刪除成功";
    }
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

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

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

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

    Java?不同版本的?Switch語句

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

    Mybatis實現(xiàn)動態(tài)SQL編寫詳細代碼示例

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

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

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

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

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

    在SpringBoot中通過jasypt進行加密解密的方法

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

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

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

    Java枚舉類使用Lombok方式

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

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

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

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

    下面小編就為大家?guī)硪黄獪\談java+內存分配及變量存儲位置的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08

最新評論