您好,登錄后才能下訂單哦!
今天小編給大家分享一下springboot+dynamicDataSource怎么實(shí)現(xiàn)動(dòng)態(tài)添加切換數(shù)據(jù)源的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
之前有篇寫了切換數(shù)據(jù)源的方法,那些可以在yml中配置固定的幾個(gè)數(shù)據(jù)源進(jìn)行切換后面需要新需求 在數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查數(shù)據(jù)源 然后連。
之前配置的就不說(shuō)了自行查看http://www.kemok4.com/article/233975.htm
之前傳獲取的tagetData是直接讀取yml中的多個(gè)數(shù)據(jù)源。此時(shí)我寫了dataTest方法調(diào)用主數(shù)據(jù)直接查詢數(shù)據(jù)庫(kù)里的某張表 并把表中內(nèi)容加載成一個(gè)個(gè)數(shù)據(jù)源放到map中
一張表的數(shù)據(jù)信息作為數(shù)據(jù)源。
需要重啟服務(wù),后面發(fā)現(xiàn)DynamicDataSource中有一個(gè)Map變量用于存儲(chǔ)數(shù)據(jù)源,在調(diào)用其構(gòu)造函數(shù)時(shí)候有進(jìn)行加載
只要修改了這個(gè)map那么新增或者修改的map也可以生效了,完結(jié)。
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 "刪除成功"; } }
以上就是“springboot+dynamicDataSource怎么實(shí)現(xiàn)動(dòng)態(tài)添加切換數(shù)據(jù)源”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。