SpringBoot 集成 Impala + mybatis + druid

4 篇文章 0 订阅
1 篇文章 0 订阅

1. 获取依赖

Impala的依赖在maven仓库下载不了,需要自己去官网下载: https://www.cloudera.com/downloads/connectors/impala/jdbc/2-6-3.html , 麻烦可直接去博主的GitHub项目中获取

2. 配置Druid连接池

Druid依赖:

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.1.21</version>
</dependency>

连接池配置:

 # 数据源
  datasource:
    driver-class-name: com.cloudera.impala.jdbc41.Driver
    url: jdbc:impala://192.168.1.101:21050/default
    username: root
    password: root
    # Druid连接池配置
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 初始化
      initial-size: 3
      # 最大
      max-wait: 10
      # 最小
      min-idle: 3
      # 最大连接等待超时时间
      max-active: 60000
      # 周期性剔除长时间呆在池子里未被使用的空闲连接, 1 min 一次,单位毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      # 设置连接在池中最大存活时长,超过上限才会被清理
      max-evictable-idle-time-millis: 600000
      # 验证连接是否可用,使用的SQL语句
      validation-query: SELECT 'x'
      # 连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.
      test-while-idle: true
      # 借出连接时不要测试,否则很影响性能
      test-on-borrow: false
      # 指明是否在归还到池中前进行检验
      test-on-return: false

初始化的连接一定要大于1,否则第一次查询时会出现这类错误:
Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 10, active 1, maxActive 60000, creating 1, createElapseMillis 21
有的通过设置 remove-abandonedremove-abandoned-timeout 这两个参数来处理这个问题,别人的我不知道,反正我遇到的时候这个设置是不能解决的。

3. 集成Pagehelper分页插件

yml文件中的配置:

#pagehelper
pagehelper:
  helperDialect: impala
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql
  offsetAsPageNum: true
  pageSizeZero: true
#  dialectAlias: mysql=com.github.pagehelper.dialect.helper.MySqlDialect mysql采用的方式
  dialectAlias: impala=com.github.pagehelper.dialect.helper.HsqldbDialect 

HsqldbDialect 会采用 offset的方式来分页,impala也只支持offset方式,不支持limit 1, 10 这种方式。

代码中的使用方式:

/**
 * 根据分页、排序信息和检索条件查询 @size 条 日志数据
 * @param pageParam 分页参数
 * @param queryDTO  查询条件
 * @return
 */
@Override
public List<CrashLog> list(PageParam pageParam, QueryDTO queryDTO) {
    Integer size = pageParam.getSize();
    Integer page = pageParam.getPage();
    pageParam.setPage(( page - 1 ) * size);
    PageHelper.startPage(page, size);
    PageHelper.orderBy("`timestamp` desc ");
    Example example = new Example(CrashLog.class);
    if (null != queryDTO){
        if (StringUtils.isNotEmpty(queryDTO.getAppid())){
            example.and().andEqualTo("appid", queryDTO.getAppid());
        }
    }
    List<CrashLog> crashLogs = crashLogMapper.selectByExample(example);
    return crashLogs;
}

impala分页时必须要排序,因此需要指定排序字段和顺序

4. 集成mybatis 和 通用mapper

这些配置都一样,没什么新鲜的,不明白的可参考我这篇博客:https://blog.csdn.net/qq_34997906/article/details/99745892

###   Mybatis Config  ###
mybatis:
  check-config-location: true
  typeAliasesPackage: com.example.janche.**.domain
  mapperLocations: classpath:mapper/**/*.xml
  type-handlers-package: com.example.janche.common.mybatis.handler.*
###   通用 Mapper  ###
mapper:
  IDENTITY: mysql
  notEmpty: false
  mappers:
    - com.example.janche.common.core.Mapper
    - com.example.janche.common.core.TkMapper

5. 遇到的问题

impala服务重启后,springboot项目获取不到连接,导致查询报错的问题

1. impala重启后,连接池中的连接还没有销毁时访问:将出现下面的异常:

Cause: java.sql.SQLException: [Cloudera][ImpalaJDBCDriver](500593) Communication link failure. Failed to connect to server. Reason: Unknown.
Cause: java.sql.SQLException: [Cloudera][ImpalaJDBCDriver](500593) Communication link failure. Failed to connect to server. Reason: java.net.SocketException: Software caused connection abort: socket write error.
Caused by: com.cloudera.impala.jdbc41.internal.apache.thrift.transport.TTransportException
解决方式此时需要等待Druid连接池自动剔除呆在池子里未被使用的空闲连接,也就是上面配置的1分钟,1分钟后,再次查询就能自动查到了,所以,出现此异常后,可捕获异常,等待一分钟后才让页面可以查询。有很多小伙伴配置了Druid连接池但实际上是不生效的,注意观察yml文件的颜色变化。

2. impala重启后,连接池中的连接已经销毁后访问:第一次访问也会有如下异常,后续在访问就不会了,虽然第一次有异常打印,但是能够正常获取到请求结果,不影响程序的正常执行:

Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 10, active 1, maxActive 60000, creating 1, createElapseMillis 21
解决方式不影响程序正常运行,可忽略

源码地址:https://github.com/Janche/spring-boot-impala.git 有帮助的话,记得star哟

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值