springboot集成mybatis+mysql/impala实现双数据源

最近大数据服务端项目开发需要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、推送完毕,项目就可以引用了,引用方式如下:

<dependency>
    <groupId>com.cloudera</groupId>
    <artifactId>impala-jdbc41</artifactId>
    <version>2.6.3-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>1.2.1</version>
    <exclusions>
        <exclusion>
            <artifactId>slf4j-log4j12</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
        <exclusion>
            <artifactId>servlet-api</artifactId>
            <groupId>javax.servlet</groupId>
        </exclusion>
        <exclusion>
            <artifactId>geronimo-jaspic_1.0_spec</artifactId>
            <groupId>org.apache.geronimo.specs</groupId>
        </exclusion>
        <exclusion>
            <groupId>org.eclipse.jetty.aggregate</groupId>
            <artifactId>jetty-all</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

 

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

1、引入动态数据源jar包

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

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") 来配置使用哪个数据源,如果不加注解,会走默认的数据源。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴能为您提供帮助!下面是一个简单的SpringBoot+MyBatis+MySQL+Vue实现图书管理系统的步骤: 1. 创建SpringBoot项目 使用Spring Initializr创建一个新的SpringBoot项目,并添加web、mybatismysql依赖。 2. 配置MySQL数据库 在application.properties文件中添加MySQL数据库连接信息,包括数据库URL、用户名、密码等。 3. 创建数据库表 在MySQL中创建一个名为books的数据库表,用于存储图书信息,包括图书ID、图书名称、图书作者、图书出版社等字段。 4. 创建MyBatis映射文件 在src/main/resources目录下创建一个名为mapper的文件夹,用于存放MyBatis映射文件。创建一个名为BookMapper.xml的映射文件,定义对books表的CRUD操作。 5. 创建Book实体类 在src/main/java目录下创建一个名为entity的包,用于存放实体类。创建一个名为Book的实体类,属性包括图书ID、图书名称、图书作者、图书出版社等。 6. 创建BookService接口和实现类 在src/main/java目录下创建一个名为service的包,用于存放服务接口和实现类。创建一个名为BookService的接口,并定义对books表的CRUD操作。创建一个名为BookServiceImpl的实现类,实现BookService接口。 7. 创建BookController类 在src/main/java目录下创建一个名为controller的包,用于存放控制器类。创建一个名为BookController的控制器类,定义RESTful API接口,包括查询图书列表、添加图书、修改图书和删除图书等。 8. 创建前端页面 使用Vue.js创建一个前端页面,包括图书列表、添加图书、修改图书和删除图书等功能。 9. 测试运行 启动SpringBoot应用程序,并在浏览器中测试RESTful API接口和前端页面功能。 以上是简单的实现步骤,具体实现过程和代码可以根据您的需要进行调整和修改。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值