【已解决】SpringBoot运行时数据源动态切换添加
SpringBoot运行时数据源动态切换
- 解决问题
- 解决方式
- 引入依赖:
- 对应controller接口:
- 对应实体类:
解决问题
需要在运行中对数据源进行不同的切换、添加
即启动项目后进行数据源切换、添加、删除、查看等
解决方式
主要使用baomidou的dynamic-datasource工具进行操作
具体操作如下:
引入依赖:
<dependency><groupId>com.baomidougroupId><artifactId>dynamic-datasource-spring-boot-starterartifactId><version>3.5.0version>dependency>
对应controller接口:
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
import com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
import com.zsk.generator.entity.DataSourceDTO;
import com.zsk.generator.entity.PlmcBaseInfoEntity;
import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.Set;/*** @Author XuZhuHong* @CreateTime 2022/11/2 16:01*/
@RequestMapping("Plmc")
@RestController
public class PlmcSetController {@Resourceprivate DataSource dataSource;@Resourceprivate DefaultDataSourceCreator dataSourceCreator;@Resourceprivate DruidDataSourceCreator druidDataSourceCreator;public static String modelName = "";public static String author = "";public static String email = "";/*** 通用数据源会根据maven中配置的连接池根据顺序依次选择。* 默认的顺序为druid>hikaricp>beecp>dbcp>spring basic** @param dto 数据源对象* @return*/@PostMapping("/setDataSources")public String setDataSources(@Validated @RequestBody DataSourceDTO dto) {//先删除这个连接的removeDatasource(dto.getPoolName());//添加传入的数据信息DataSourceProperty dataSourceProperty = new DataSourceProperty();BeanUtils.copyProperties(dto, dataSourceProperty);DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;DataSource dataSource = dataSourceCreator.createDataSource(dataSourceProperty);ds.addDataSource(dto.getPoolName(), dataSource);//设置为主要的ds.setPrimary(dto.getPoolName());return ds.getDataSources().keySet().toString();}@PostMapping("/setDruidDatasource")public Set< String > setDruidDatasource(@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("removeDatasource")public String removeDatasource(String name) {DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;try {ds.removeDataSource(name);} catch (Exception e) {System.out.println("没有这个数据连接");}return "删除成功";}}
对应实体类:
import lombok.Data;
import javax.validation.constraints.NotBlank;
/*** @author Xuzhuh*/
@Data
public class DataSourceDTO {@NotBlankprivate String poolName;@NotBlankprivate String driverClassName;@NotBlankprivate String url;@NotBlankprivate String username;private String password;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
