【已解决】SpringBoot运行时数据源动态切换添加

解决问题

需要在运行中对数据源进行不同的切换、添加
即启动项目后进行数据源切换、添加、删除、查看等

解决方式

主要使用baomidou的dynamic-datasource工具进行操作
具体操作如下:

引入依赖:

		<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </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 {

    @Resource
    private DataSource dataSource;
    @Resource
    private DefaultDataSourceCreator dataSourceCreator;
    @Resource
    private 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 {
    @NotBlank
    private String poolName;
    @NotBlank
    private String driverClassName;
    @NotBlank
    private String url;
    @NotBlank
    private String username;
    private String password;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Springboot中使用MongoDB多数据源动态切换,可以通过以下步骤实现: 1. 添加MongoDB的依赖 在pom.xml文件中加入对spring-boot-starter-data-mongodb和mongodb-driver的依赖。 2. 配置多数据源 在application.yml或application.properties中配置多个数据源,如下所示: ``` spring: data: mongodb: uri: mongodb://localhost:27017/test1 database: test1 seconddata: mongodb: uri: mongodb://localhost:27017/test2 database: test2 ``` 其中第一个数据源是默认的数据源,第二个数据源是自定义的数据源。 3. 配置数据源切换组件 在Springboot中使用MongoDB多数据源需要使用MongoDbFactory和MongoTemplate两个组件。我们可以通过自定义MongoTemplate的方式来实现数据源切换。具体实现可以参考以下代码: ```java @Configuration public class MultipleMongoConfig { @Bean(name = "firstMongoTemplate") @Primary public MongoTemplate firstMongoTemplate() throws Exception { return new MongoTemplate(firstFactory()); } @Bean(name = "secondMongoTemplate") public MongoTemplate secondMongoTemplate() throws Exception { return new MongoTemplate(secondFactory()); } @Bean @Primary public MongoDbFactory firstFactory() throws Exception { return new SimpleMongoDbFactory(new MongoClientURI( env.getProperty("spring.data.mongodb.uri"))); } @Bean public MongoDbFactory secondFactory() throws Exception { return new SimpleMongoDbFactory(new MongoClientURI( env.getProperty("seconddata.mongodb.uri"))); } } ``` 4. 动态切换数据源 在需要切换数据源的地方,可以通过注入MongoTemplate来实现。具体实现可以参考以下代码: ```java @Service public class UserServiceImpl implements UserService { @Autowired @Qualifier("firstMongoTemplate") private MongoTemplate firstMongoTemplate; @Autowired @Qualifier("secondMongoTemplate") private MongoTemplate secondMongoTemplate; public void save(User user) { if (user.isUseSecondDataSource()) { secondMongoTemplate.save(user); } else { firstMongoTemplate.save(user); } } public User findById(String id, boolean useSecondDataSource) { if (useSecondDataSource) { return secondMongoTemplate.findById(id, User.class); } else { return firstMongoTemplate.findById(id, User.class); } } } ``` 在上面的示例中,我们可以通过isUseSecondDataSource()方法来判断是否需要使用第二个数据源。如果需要使用第二个数据源,则使用secondMongoTemplate;否则使用firstMongoTemplate。 以上就是在Springboot中使用MongoDB多数据源动态切换的全部步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值