北冰洋以北 发表于 2024-12-20 17:37:10

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的操持哲学是保持核心功能的轻便性,将监控等功能留给第三方库处理惩罚。
至此,搭建完成,有问题的可批评区留言。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Springboot+Druid(可切换Hikari)+Mybatis-plus+mysql+hive的多数据源项目配