当前位置: 首页 > article >正文

Springboot+Druid(可切换Hikari)+Mybatis-plus+mysql+hive的多数据源项目配置

1.搭建一个springboot项目,不会的搜一下,很简单这里不做赘述。

2.首先你搭建的springboot能正常启动之后,pom文件添加如下依赖:

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version> <!-- 选择自己合适的版本,druid连接池依赖,Hikari是springboot自带的不用引入依赖 -->
        </dependency>
      
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId><!--Mybatis-plus依赖-->
            <version>3.5.9</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <!-- 多数据源依赖 -->
        <version>3.5.0</version>
        </dependency>
      
<!--hive依赖,自行选择版本-->

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>4.0.1</version>
            <classifier>standalone</classifier>
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.hive</groupId>
                    <artifactId>hive-shims</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.glassfish</groupId>
                    <artifactId>javax-el</artifactId>
                </exclusion>
                <!-- 其他可能的排除项 -->
            </exclusions>
        </dependency>

3.编写yaml文件(这里的druid其他自定义参数没配置,可自行查阅资料完善,以下配置能支持一般使用):

spring:
  datasource:
    dynamic:
      primary: mysql
      strict: false
      datasource:
        mysql:
          url: jdbc:mysql://你的IP:端口/数据库?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
          username: root
          password: wC62vHcv43!e

#hive配置
        hive:
          url: 你的url
          username: username
          password: password
          driver-class-name: org.apache.hive.jdbc.HiveDriver
          hikari:      #只是为了让控制台不警告,可选,不影响使用
            connection-timeout: 30000  # 连接超时时间(毫秒)
            validation-timeout: 5000   # 验证超时时间(毫秒)

4.到此,配置以及准备完成,编写两个数据源的bean配置类:

mysql配置类:

@Configuration
public class MysqlDataSourceConfig {

    @Value("${spring.datasource.dynamic.datasource.mysql.url}")
    private String mysqlUrl;

    @Value("${spring.datasource.dynamic.datasource.mysql.username}")
    private String mysqlUsername;

    @Value("${spring.datasource.dynamic.datasource.mysql.password}")
    private String mysqlPassword;



    @Bean(name = "mysqlDataSource")
    @Primary  // 默认数据源
    public DataSource mysqlDataSource() {
        DruidDataSource config = new DruidDataSource(); 
        //换成Hikari连接池只需要将这一行代码改为HikariConfig config = new HikariConfig();
        config.setUrl(mysqlUrl);
        config.setUsername(mysqlUsername);
        config.setPassword(mysqlPassword);
        return config;
    }

    @Bean(name = "mysqlJdbcTemplate")
    public JdbcTemplate mysqlJdbcTemplate(@Qualifier("mysqlDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

hive配置类:

@Configuration
public class HiveDataSourceConfig {

    @Value("${spring.datasource.dynamic.datasource.hive.url}")
    private String hiveUrl;

    @Value("${spring.datasource.dynamic.datasource.hive.username}")
    private String hiveUsername;

    @Value("${spring.datasource.dynamic.datasource.hive.password}")
    private String hivePassword;

    @Value("${spring.datasource.dynamic.datasource.hive.driver-class-name}")
    private String hiveDriverClassName;

    @Bean(name = "hiveDataSource")
    public DataSource hiveDataSource() {
        DruidDataSource config = new DruidDataSource();
        //换成Hikari连接池只需要将这一行代码改为HikariConfig config = new HikariConfig();
        config.setUrl(hiveUrl);
        config.setUsername(hiveUsername);
        config.setPassword(hivePassword);
        config.setDriverClassName(hiveDriverClassName);
        return config;
    }

    @Bean(name = "hiveJdbcTemplate")
    public JdbcTemplate hiveJdbcTemplate(@Qualifier("hiveDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

5.使用:

至于mysql,正常照mybatisplus的使用,mapper,service调用即可

对于hive:

在需要用到的类注入

@Resource
@Qualifier("hiveJdbcTemplate")
private JdbcTemplate hiveJdbcTemplate;

使用这个template去执行SQL即可:

  public void test(){
  String query="******"
  hiveJdbcTemplate.execute(query);
  }  
  

那么,简述一下Druid和Hikari的区别吧:

1. 设计目标
  • Druid:由阿里巴巴开发,不仅是一个高性能的数据库连接池,还集成了监控、SQL解析和执行计划分析等功能。它被设计为一个综合性的数据库连接管理和优化工具。
  • HikariCP:由Brett Wooldridge创建,专注于成为最快速、最小化开销的连接池。它的设计理念是简单、高效,只做连接池该做的事情,不做过多的附加功能。
2. 性能
  • Druid:虽然Druid也具有良好的性能表现,但其丰富的特性可能会带来额外的开销。在某些情况下,这些附加功能(如SQL解析、日志记录等)可能会影响性能。
  • HikariCP:以其出色的性能著称,尤其是在高并发环境下,HikariCP通常比其他连接池更快。它通过减少锁争用和其他优化技术来达到这一点。
3. 配置复杂度
  • Druid:提供了大量的配置选项,允许用户根据需要进行详细的调整。这使得它非常适合那些对连接池有特定需求的应用程序,但也可能增加了配置的复杂性。
  • HikariCP:配置相对简单,只有几个关键参数需要设置。对于大多数应用程序来说,默认配置已经足够好,不需要太多的调整。
4. 监控和诊断
  • Druid:内置了强大的监控和统计功能,可以实时查看连接池的状态、SQL执行情况等。这对于调试和性能优化非常有用。
  • HikariCP:没有内置的监控功能,但是可以通过集成外部监控工具(如Micrometer)来实现监控。HikariCP的设计哲学是保持核心功能的简洁性,将监控等功能留给第三方库处理。

至此,搭建完成,有问题的可评论区留言。


http://www.kler.cn/a/450891.html

相关文章:

  • 简单了解函数递归
  • YOLO模型格式转换:pt -> onnx -> rknn
  • nlp新词发现——浅析 TF·IDF
  • linux-19 根文件系统(一)
  • Jenkins 任意文件读取(CVE-2024-23897)修复及复现
  • CASA(Carnegie-Ames-Stanford Approach) 模型原理及实践
  • 谷歌浏览器的屏幕截图工具使用指南
  • ubuntu paddle ocr 部署bug问题解决
  • 【Java数据结构】LinkedList
  • html+css网页设计 美食 百味美食4个页面
  • 【生信圆桌x教程系列】如何安装 seurat V5版本R包,最详细安装手册
  • Ubuntu22.04 LTS 安装nvidia显卡驱动
  • 美国加州房价数据分析02
  • 堆排序——C语言实现
  • Python毕业设计选题:基于Python的农产品销售系统的设计与实现_django
  • 微众银行金融场景 Agent:创新实践与深度剖析(12/30)
  • 洛谷 P1706 全排列问题 C语言
  • Django 管理界面中注册和配置 ECSService 模型
  • S5P6818_系统篇(9)kernel基础 sys/proc接口
  • 【开源库 | xlsxio】C/C++读写.xlsx文件,xlsxio 在 Linux(Ubuntu18.04)的编译、交叉编译
  • Python|Pyppeteer实现全自动化触发reCaptcha验证码(28)
  • nlp新词发现——浅析 TF·IDF
  • 什么是MVCC?
  • 启用Linux防火墙日志记录和分析功能
  • 【机器学习】当教育遇上机器学习:打破传统,开启因材施教新时代
  • 生产看板管理系统涵盖哪些方面