springboot集成mybatis+mysqlimpala实现双数据源

springboot集成mybatis+mysqlimpala实现双数据源,第1张

最近大数据服务端项目开发需要springboot框架通过impala查询工具直接查hadoop的HDFS数据源,同时也需要查大数据聚合mysql数据,需要实现双数据源

所以研究了下,在springboot框架下,通过java语言来连接impala查询工具,实现数据仓库数据查询。

整个过程分为两大部分,第一部分:springboot集成mybatis+impala。第二部分,实现mysql和impala双数据源

第一部分:springboot集成mybatis详细过程不重复,下面的 *** 作都是认为已经配置好mybatis环境的情况下做的。

1、引入impala驱动jar包,该jar包不在maven仓库中,需要自行下载,下载地址链接: https://pan.baidu.com/s/1wlLsrDvZliuwL_qGtND7nw?pwd=sivw

提取码: sivw

2、下载完毕建议推送到私服仓库,推送方法:

mvn deploy:deploy-file -DgroupId=com.cloudera -DartifactId=impala-jdbc41 -Dversion=2.6.3-SNAPSHOT -Dpackaging=jar -Dfile=F:\Repository\impala\impala-jdbc41\2.6.3\ImpalaJDBC41.jar -Durl=http://xx.xx.xx.xx:8081/repository/maven-snapshots/ -DrepositoryId=snapshots

3、推送完毕,项目就可以引用了,引用方式如下:


    com.cloudera
    impala-jdbc41
    2.6.3-SNAPSHOT


    org.apache.hive
    hive-jdbc
    1.2.1
    
        
            slf4j-log4j12
            org.slf4j
        
        
            servlet-api
            javax.servlet
        
        
            geronimo-jaspic_1.0_spec
            org.apache.geronimo.specs
        
        
            org.eclipse.jetty.aggregate
            jetty-all
        
    

以上,因为hive-jdbc的jar包依赖,导致了多个jar包的冲突,jar包冲突导致服务启动不了,所以hive下面加入了jar包排除。

4、配置数据源

spring:
  application:
    name: xxxx
  main:
    #多个FeignClient对应一个value
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      config:
        server-addr: xxxxxxxxxx:8848
        namespace: c00000-c02d-48bb-9e18-a1300000e63
        group: DEFAULT_GROUP
        file-extension: yml
        shared-configs[0]:
          data-id: xx-xx-common.yml
          group: DEFAULT_GROUP
          refresh: true
  datasource:
    dynamic:
      primary: mysqlDataSource #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源
      datasource:
        mysqlDataSource:
          username: xxxxx
          password: xxxxx
          url: jdbc:mysql://xx.xx.xx.xxx:3306/test?allowMultiQueries=true
          driver-class-name: com.mysql.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
        impalaDataSource:
          url: jdbc:impala://xx.xx.xx.xx:21050/test
          driver-class-name: com.cloudera.impala.jdbc41.Driver
          type: com.alibaba.druid.pool.DruidDataSource
        ########## 连接池 配置 ##########
        druid:
          # 配置初始化大小、最小、最大
          initial-size: 5
          minIdle: 5
          max-active: 16
          # 配置获取连接等待超时的时间(单位:毫秒)
          max-wait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          time-between-eviction-runs-millis: 2000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          min-evictable-idle-time-millis: 600000
          max-evictable-idle-time-millis: 900000
          # 用来测试连接是否可用的SQL语句,默认值每种数据库都不相同,这是mysql
          validationQuery: select 1
          # 应用向连接池申请连接,并且testOnBorrow为false时,连接池将会判断连接是否处于空闲状态,如果是,则验证这条连接是否可用
          testWhileIdle: true
          # 如果为true,默认是false,应用向连接池申请连接时,连接池会判断这条连接是否是可用的
          testOnBorrow: false
          # 如果为true(默认false),当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用
          testOnReturn: false
          # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle
          poolPreparedStatements: true
          # 要启用PSCache,必须配置大于0,当大于0时, poolPreparedStatements自动触发修改为true,在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
          maxOpenPreparedStatements: 20
          maxPoolPreparedStatementPerConnectionSize: 20
          useGlobalDataSourceStat: true
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
          # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive *** 作
          keepAlive: true

5、上面四步做完,可以使用我其他文章中自动生成代码,进行一个测试了。

第二部分:从单数据源变成impala和mysql双数据源

1、引入动态数据源jar包


    com.baomidou
    dynamic-datasource-spring-boot-starter
    3.4.0

2、在yml中配置多数据源

spring:
  application:
    name: xx-xx
  main:
    #多个FeignClient对应一个value
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      config:
        server-addr: nacos-headless.ms-nacos.svc.cluster.local:8848
        namespace: c693d7a3-c02d-48bb-9e18-a1331f81fe63
        group: DEFAULT_GROUP
        file-extension: yml
        shared-configs[0]:
          data-id: xx-xx-xx.yml -------引入的公共配置
          group: DEFAULT_GROUP
          refresh: true
  datasource:
    dynamic:
      primary: mysqlDataSource #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源
      datasource:
        mysqlDataSource:
          username: xxxx
          password: xxxxxx
          url: jdbc:mysql://xx.xx.xx.xx:3306/xx?allowMultiQueries=true
          driver-class-name: com.mysql.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
        impalaDataSource:
          url: jdbc:impala://xx.xx.xx.xx:21050/test
          driver-class-name: com.cloudera.impala.jdbc41.Driver
          type: com.alibaba.druid.pool.DruidDataSource
        ########## 连接池 配置 ##########
        druid:
          # 配置初始化大小、最小、最大
          initial-size: 5
          minIdle: 5
          max-active: 16
          # 配置获取连接等待超时的时间(单位:毫秒)
          max-wait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          time-between-eviction-runs-millis: 2000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          min-evictable-idle-time-millis: 600000
          max-evictable-idle-time-millis: 900000
          # 用来测试连接是否可用的SQL语句,默认值每种数据库都不相同,这是mysql
          validationQuery: select 1
          # 应用向连接池申请连接,并且testOnBorrow为false时,连接池将会判断连接是否处于空闲状态,如果是,则验证这条连接是否可用
          testWhileIdle: true
          # 如果为true,默认是false,应用向连接池申请连接时,连接池会判断这条连接是否是可用的
          testOnBorrow: false
          # 如果为true(默认false),当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用
          testOnReturn: false
          # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle
          poolPreparedStatements: true
          # 要启用PSCache,必须配置大于0,当大于0时, poolPreparedStatements自动触发修改为true,在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
          maxOpenPreparedStatements: 20
          maxPoolPreparedStatementPerConnectionSize: 20
          useGlobalDataSourceStat: true
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
          # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive *** 作
          keepAlive: true

 

3、service层调用持久层处理

根据数据源的不通,在mapper接口文件上使用

@DS("impalaDataSource") 来配置使用哪个数据源,如果不加注解,会走默认的数据源。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/757597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存