精华内容
下载资源
问答
  • 本来自己写的动态数据源,后来看到苞米豆开源框架中有动态数据源,于是就直接改用苞米豆多数据源 依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-...

    本来自己写的动态数据源,后来看到苞米豆开源框架中有动态数据源,于是就直接改用苞米豆多数据源

    依赖

      <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                <version>3.0.0</version>
            </dependency>

    把动态数据源信息放到数据库中所以要个默认数据源配置

    server:
      port: 8080
    spring:
      datasource:
        dynamic:
          datasource:
            master:
              username: test
              password: test
              url: jdbc:oracle:thin:@192.168.2.110:1521/orcl
              driver-class-name: oracle.jdbc.OracleDriver
    #          username: sa
    #          password: ""
    #          url: jdbc:h2:mem:test
    #          driver-class-name: org.h2.Driver
    logging:
      path: C:/logs
      file: C:/logs/interface.log
    
    pagehelper:
      helperDialect: Oracle
      reasonable: true
      supportMethodsArguments: true
      params: count=countSql
    
    #打印日志
    mybatis:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      mapper-locations: classpath:mybatis/*.xml
    #mybatis-plus:
    #  mapper-locations: classpath:mybatis/*.xml
    #  configuration:
    #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #  mapper-locations: classpath:mybatis/*.xml

    添加,删除以及测试数据源

    
    import com.baomidou.dynamic.datasource.creator.BasicDataSourceCreator;
    import com.baomidou.dynamic.datasource.creator.DataSourceCreator;
    import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
    import com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator;
    import com.baomidou.dynamic.datasource.creator.HikariDataSourceCreator;
    import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
    import com.mzy.model.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.jdbc.core.JdbcTemplate;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.*;
    
    import javax.sql.DataSource;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * 动态数据源添加删除
     */
    
    @RestController
    @RequestMapping("/datasources")
    @Api(tags = "添加删除数据源")
    public class LoadController {
    
      @Autowired
      private DataSource dataSource;
      @Autowired
      private DataSourceCreator dataSourceCreator;
      @Autowired
      private  BasicDataSourceCreator basicDataSourceCreator;
    
    
      /**
       * 获取当前数据源
       * @return
       */
      @GetMapping
      @ApiOperation("获取当前所有数据源")
      public Set<String> now() {
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        return ds.getCurrentDataSources().keySet();
      }
    
      /**
       * 添加数据源
       * dataSourceProperty数据类型:{"pollName": "dataSource_1","username": "ssodata","password": "ssodata","driverClassName":"oracle.jdbc.OracleDriver","url": "jdbc:oracle:thin:@192.168.2.166:1521/orcl"}
       * @return
       */
      @PostMapping("/add")
      @ApiOperation("通用添加数据源(推荐)")
      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.getPollName(), dataSource);
        return ds.getCurrentDataSources().keySet();
      }
    
      @PostMapping("/addBasic")
      @ApiOperation(value = "添加基础数据源", notes = "调用Springboot内置方法创建数据源,兼容1,2")
      public Set<String> addBasic(@Validated @RequestBody DataSourceDTO dto) {
        DataSourceProperty dataSourceProperty = new DataSourceProperty();
        BeanUtils.copyProperties(dto, dataSourceProperty);
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        DataSource dataSource = basicDataSourceCreator.createDataSource(dataSourceProperty);
        ds.addDataSource(dto.getPollName(), dataSource);
        return ds.getCurrentDataSources().keySet();
      }
    
      @DeleteMapping
      @ApiOperation("删除数据源")
      public String remove(String name) {
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        ds.removeDataSource(name);
        return "删除成功";
      }
    
      @GetMapping("/testNowDataSource")
      public  List<Map<String, Object>> testNowDataSource(String dataSourcesName){
        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
        Map<String, DataSource> currentDataSources = ds.getCurrentDataSources();
        JdbcTemplate jdbcTemplate = new JdbcTemplate(currentDataSources.get(dataSourcesName));
        List<Map<String, Object>> mapList = jdbcTemplate.queryForList("select * from dba_tablespaces ");
        return  mapList;
      }
    
    }
    

    实体类:

    
    import io.swagger.annotations.ApiModelProperty;
    import javax.validation.constraints.NotBlank;
    import lombok.Data;
    import lombok.ToString;
    
    @Data
    @ToString
    public class DataSourceDTO {
        @NotBlank
        @ApiModelProperty(value = "连接池名称", example = "test")
        private String pollName;
    
        @NotBlank
        @ApiModelProperty(value = "JDBC driver", example = "org.h2.Driver")
        private String driverClassName;
    
        @NotBlank
        @ApiModelProperty(value = "JDBC url 地址", example = "jdbc:h2:mem:test10")
        private String url;
    
        @NotBlank
        @ApiModelProperty(value = "JDBC 用户名", example = "sa")
        private String username;
    
        @ApiModelProperty(value = "JDBC 密码")
        private String password;
    }
    

     

     

    展开全文
  • 在springboot中配置多数据源的,用切面进行数据库切换功能,项目启动时报错,造成循环依赖 解决方法: 在springboot项目的启动类中,排除DataSource自动配置类,否则会默认自动配置,不使用自定义的配置类 .....

    在springboot中配置多数据源的,用切面进行数据库切换功能,项目启动时报错,造成循环依赖

    解决方法:

    在springboot项目的启动类中,排除DataSource自动配置类,否则会默认自动配置,不使用自定义的配置类


     

    展开全文
  • 背景: 最近有个项目,有32家分公司,集团总部需要取这个32家分公司数据做分析,由于每个分公司的数据都比较庞大,所以最终方案是每个分公司一个DW,在cube搭建过程中将每个公司数据作为一个分区数据的来源,这样子...
       

    背景:

          最近有个项目,有32家分公司,集团总部需要取这个32家分公司数据做分析,由于每个分公司的数据都比较庞大,所以最终方案是每个分公司一个DW,在cube搭建过程中将每个公司数据作为一个分区数据的来源,这样子即可分区又易于维护每个分公司的数据,而且还不会容易引发一个DW而数据爆炸、效率等问题。

    问题:

          在创建cube时候,由于先前搭建先用一个分公司搭建了一个模型,所以后面想着将其它的分公司事实表添加到这个数据源视图里面即可,于是兴奋的创建了好多数据源,然后在原有的数据源视图里面添加了其它分公司的事实表,也添加修改了分区等内容,十分顺利,后面处理也是成功。

          但是后面,因为店铺和经销商两个维度刚开始是分开2个单独维度,但后面需要分析各经销商经营情况,所以必须将经销商和店铺连接起来,于是就做了经销商和店铺之间的引用关系,cube于是就创建了销售度量值维度和经销商维度通过店铺的引用维度关系,但是再次处理,就处理失败,总是报错:数据源视图未包含“dbo_Dim_Store”表或视图的定义

          1

    测试:

          测试一:

                猜想是否是数据源视图引发的,于是删除了刚才的引用关系,建立普通的关系,分区也没有改变任何设置,重新处理通过

         

          测试二:

                看到错误提示,想来想去还是觉得是分区的问题,于是查看了错误时候报错的分区,查看其创建分区时候使用的查询SQL,发现一个

          重大问题:创建了引用维度的度量值组,查询的SQL回去关联相应的维度表查询,就如我们平时写JOIN查询一样,那在我们后面添加的

          的其它公司的数据源视图里面并没有这两个需要建立引用关系的维度表,只有事实表,所以在查询时候就导致了这个找不到xxx表的原因

          呢?于是将这两个引用的维度表也添加到了对应数据源视图中,再处理,就可以了。

    总结:

          我们在创建引用维度的时候,其实cube底层也是通过SQL查询数据的,所以它依然会连接我们这些表进行查询,因此在我们的数据源视图中如果没有这些表,则查询就会失败,找不到表,因此我们在创建引用维度时候一定要注意:如果分区用到了不同数据源视图,则需要在相应视图中添加这个分区中使用的维度表方可。如果没有使用维度引用,则我们就不需要添加这些表,每个数据源视图就是一个单独的分公司即可。

    展开全文
  •  最近有个项目,有32家分公司,集团总部需要取这个32家分公司数据做分析,由于每个分公司的数据都比较庞大,所以最终方案是每个分公司一个DW,在cube搭建过程中将每个公司数据作为一个分区数据的来源,这样子即可...

    背景:

      最近有个项目,有32家分公司,集团总部需要取这个32家分公司数据做分析,由于每个分公司的数据都比较庞大,所以最终方案是每个分公司一个DW,在cube搭建过程中将每个公司数据作为一个分区数据的来源,这样子即可分区又易于维护每个分公司的数据,而且还不会容易引发一个DW而数据爆炸、效率等问题。

     

    问题:

      在创建cube时候,由于先前搭建先用一个分公司搭建了一个模型,所以后面想着将其它的分公司事实表添加到这个数据源视图里面即可,于是兴奋的创建了好多数据源,然后在原有的数据源视图里面添加了其它分公司的事实表,也添加修改了分区等内容,十分顺利,后面处理也是成功。

          但是后面,因为店铺和经销商两个维度刚开始是分开2个单独维度,但后面需要分析各经销商经营情况,所以必须将经销商和店铺连接起来,于是就做了经销商和店铺之间的引用关系,cube于是就创建了销售度量值维度和经销商维度通过店铺的引用维度关系,但是再次处理,就处理失败,总是报错:数据源视图未包含“dbo_Dim_Store”表或视图的定义

          1

     

    测试:

    测试一:

      猜想是否是数据源视图引发的,于是删除了刚才的引用关系,建立普通的关系,分区也没有改变任何设置,重新处理通过

         

    测试二:

      看到错误提示,想来想去还是觉得是分区的问题,于是查看了错误时候报错的分区,查看其创建分区时候使用的查询SQL,发现一个重大问题:创建了引用维度的度量值组,查询的SQL回去关联相应的维度表查询,就如我们平时写JOIN查询一样,那在我们后面添加的的其它公司的数据源视图里面并没有这两个需要建立引用关系的维度表,只有事实表,所以在查询时候就导致了这个找不到xxx表的原因呢?于是将这两个引用的维度表也添加到了对应数据源视图中,再处理,就可以了。

     

    总结:

      我们在创建引用维度的时候,其实cube底层也是通过SQL查询数据的,所以它依然会连接我们这些表进行查询,因此在我们的数据源视图中如果没有这些表,则查询就会失败,找不到表,因此我们在创建引用维度时候一定要注意:如果分区用到了不同数据源视图,则需要在相应视图中添加这个分区中使用的维度表方可。如果没有使用维度引用,则我们就不需要添加这些表,每个数据源视图就是一个单独的分公司即可。

    转载于:https://www.cnblogs.com/xiongnanbin/p/3396359.html

    展开全文
  • 最近在使用SpringBoot配置AOP动态数据源,通过继承AbstractRoutingDataSource这个类来实现的,在使用的时候报了一个错误,如下 大概就是dynamicDataSource依赖dataSourceScxys,dataSourceScxys依赖...
  • 使用阿里druid及封装的druid-spring-boot-starter实现多数据源时遇到 了一点小问题,过程虽然曲折,幸运的是最终解决了问题,特此拿来和诸君分享,第 一次写文章,水平有限,望多多海涵。 分享一首诗词。 我本...
  • * @Primary 指定在同一个接口有多个实现类可以注入的时候,默认选择哪一个,而不是让@Autowire注解报错(一般用于多数据源的情况下) * @Qualifier 根据名称进行注入,通常是在具有相同的多个类型的实例的一个注入...
  • 目前写SPringBoot引入多数据源路由 遇到了需要控制加载顺序的问题 @Configuration @MapperScan(basePackages = "com.gaotianyue.dao") public class DataSourceConfig { 第一步 @Bean @...
  • 此时,可以先定义一个动态名称“日期”,其引用位置(假如数据所在工作表名称是“销售记录”)如下= OFFSET(销售记录!$A$1,,, COUNTA(销售记录!$A:$A), COUNTA(销售记录$1:$1))定义名称的方法很简单,具体操作步骤如下...
  • 我要在playFramework配置 oracle 数据库 数据源 应该怎么配置以及引用呢? 我已经在conf里面写了另一个数据源 名字是test,然后我想查找的时候用sql来查找,类似这种方法 rawSql= RawSqlBuilder.parse(sql) ....
  • eos6多数据源配置

    2010-07-14 15:48:17
    系统默认提供了一个名称为default的数据源,用户不指定数据源引用名称时,就是取默认的数据源。 //获取系统默认的数据源 DataSource ds=DataSourceHelper.getDataSource(); //获取contribut...
  • web项目中可能会遇到多数据源的情况,这个时候我们需要在不同的情况下使用不同的数据源对不同的数据库进行访问,最典型的案例是数据的读写分离。多数据源的设计思路: 多数据源的具体配置步骤: spring配置文件中,...
  • EOS6 多数据源配置

    千次阅读 2009-10-23 08:54:00
    系统默认提供了一个名称为default的数据源,用户不指定数据源引用名称时,就是取默认的数据源。 //获取系统默认的数据源 DataSource ds=DataSourceHelper.getDataSource(); //获取contribu
  • 解决了循环引用 1.application.properties #the first datasource jdbc.names:1,2 jdbc1.driverClassName = com.mysql.jdbc.Driver jdbc1.url = jdbc:mysql://192.168.37.102:3306/demo_ds_1?...
  • 在之前项目小示例的基础上配置多数据源,项目结构如下: 参考代码地址:链接:https://pan.baidu.com/s/1k3AaH_FI9UiGgdKkffbEQw 提取码:muav 1、创建一个Maven项目,修改pom.xml文件增加对spring boot、...
  • SpringBoot多数据源+Mybatis配置实现

    千次阅读 2020-03-08 10:48:29
    文章目录目录结构sql脚本pom引用jar包application.yml配置数据源数据源配置Mapper接口Mapper配置文件PO测试 目录结构 由于在springboot项目当中需要同时操作不止一个数据库,需要用到数据源。在本例当中以first...
  • 同一个报表控件中可否引用多数据源的数据,如果可以,那哪个报表控件可以做到,谢谢。
  • 传统方案中,实现多数据源通常有两种方案:冗余存储,一份业务数据有多个存储,或者内部互相引用;集中的计算,不同的数据使用不同存储,但是会在统一的地方集中计算,算的时候把这些数据从不同位置读取出来。下面...
  • Jfinal+DbRecord多数据源如何配置

    千次阅读 2018-11-24 11:23:16
    我们在做java web 项目的时候,有时候会遇到一个项目中需要引用多数据源,对多数据源进行操作的情况。这里给大家分享基于jfinal +DbRecord 框架进行的双数据配置问题。 1.大致流程如下: 配置新数据源的数据连接池...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,081
精华内容 432
关键字:

多数据源引用