SpringBoot【集成 01】Druid+Dynamic+Greenplum(实际上用的是PostgreSQL的驱动)及 dbType not support 问题处理(附hikari相关配置)

简介: SpringBoot【集成 01】Druid+Dynamic+Greenplum(实际上用的是PostgreSQL的驱动)及 dbType not support 问题处理(附hikari相关配置)

1.起因

项目使用了 Greenplum 数据库和 MySQL 数据库,连接池使用的是 Druid,但是 Druid 是不支持 Greenplum 数据库的 😢 以下尝试未在生成环境测试请谨慎使用。

2.依赖

只贴出核心依赖:

<!--连接池 Druid-->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>1.1.10</version>
</dependency>
<!--多数据源管理 Dynamic-->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>2.4.2</version>
</dependency>
<!--数据源 MySQL+PostgreSQL(用于连接Greenplum)-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <scope>runtime</scope>
</dependency>

特别注意 如果直接使用greenplum的依赖和配置将会报错:

java.lang.IllegalStateException: 
dbType not support : 
null, url jdbc:pivotal:greenplum://xxx.xx.xxx.xxx:5432:5432/postgres
<dependency>
  <groupId>com.jdbc</groupId>
  <artifactId>greenplum</artifactId>
  <version>5.1.4</version>
</dependency>
spring:
  datasource:
    dynamic:
      datasource:
        gp:
          url: jdbc:pivotal:greenplum://xxx.xx.xxx.xxx:5432;DatabaseName=postgres
          username: gpadmin
          password: gpadmin
          driver-class-name: com.pivotal.jdbc.GreenplumDriver

3.配置

只贴出核心配置:

spring:
  # 多数据源不自动配置DruidDataSourceAutoConfigure
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
  # 
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: admin
        allow:
      web-stat-filter:
        enabled: true
    dynamic:
      # 全局 druid 参数配置(单独数据源配置为空时取全局配置)这里不再详细说明
      druid:
        initial-size: 1
        min-idle: 3
        maxActive: 8
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        # 不可使用 SELECT 1 FROM DUAL GP数据库没有DUAL
        validationQuery: SELECT NOW()
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        filters: stat,wall,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      primary: mysql
      p6spy: true
      datasource:
        mysql:
          url: jdbc:mysql://localhost:3306/test
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
        gp:
          url: jdbc:postgresql://xxx.xx.xxx.xxx:5432/postgres
          username: gpadmin
          password: gpadmin
          driver-class-name: org.postgresql.Driver

4.测试

启动项目,数据源初始化成功。

2022-05-26 14:16:14.836  INFO 12324 
--- [  restartedMain] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,mysql} inited
2022-05-26 14:16:15.114  INFO 12324 
--- [  restartedMain] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,gp} inited

查询 Greenplum 数据库也没有问题,SQL 监控也能够监控 Greenplum 数据库的执行情况,未在生成环境测试请谨慎使用。

5. hikari

仅贴出核心配置:

spring:
  datasource:
    hikari:
      pool-name: HikariConPool
      #最小空闲连接数
      minimum-idle: 3
      #空闲链接最大存活时间,默认600000(10分钟)
      idle-timeout: 1800000
      #最大连接数
      maximum-pool-size: 20
      #从连接池返回的链接自动提交
      auto-commit: true
      #链接最大存活时间,0表示永久存活,默认1800000(30分钟)
      max-lifetime: 1800000
      #连接超时时间,默认(30秒)
      connection-timeout: 30000

如果想验证hikari的使用情况可添加日志配置:

logging:
  level:
    com.zaxxer.hikari.HikariConfig: debug
    com.zaxxer.hikari: debug

启动信息:

2022-05-26 17:08:04.217  INFO 10108 
--- [  restartedMain] com.zaxxer.hikari.HikariDataSource       
: mysql - Starting...
2022-05-26 17:08:04.301  INFO 10108 
--- [  restartedMain] com.zaxxer.hikari.HikariDataSource       
: mysql - Start completed.
2022-05-26 17:08:04.301  INFO 10108 
--- [  restartedMain] com.zaxxer.hikari.HikariDataSource       
: gp - Starting...
2022-05-26 17:08:04.592  INFO 10108 
--- [  restartedMain] com.zaxxer.hikari.pool.PoolBase          
: gp - Driver does not support get/set network timeout for connections. ([Pivotal][Greenplum JDBC Driver]This driver does not support the 'getNetworkTimeout' and 'setNetworkTimeout' methods.)
2022-05-26 17:08:04.592  INFO 10108 
--- [  restartedMain] com.zaxxer.hikari.HikariDataSource       
: gp - Start completed.
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1574 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
1522 0
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
2091 0
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
791 4
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
2126 5
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
841 0
探索Spring Boot的@Conditional注解的上下文配置
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1774 10
|
虚拟化 iOS开发 MacOS
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS 集成 AQC 网卡驱动定制版
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS 集成 AQC 网卡驱动定制版
643 2
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS 集成 AQC 网卡驱动定制版
|
虚拟化 iOS开发 MacOS
VMware ESXi 7.0U3v macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
VMware ESXi 7.0U3v macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
1333 2
VMware ESXi 7.0U3v macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
|
虚拟化 iOS开发 MacOS
VMware ESXi 9.0.0.0100 macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
VMware ESXi 9.0.0.0100 macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
2194 1

推荐镜像

更多