首页 > 其他分享 >Druid连接池更换Guess数据源

Druid连接池更换Guess数据源

时间:2023-08-14 12:44:49浏览次数:40  
标签:Guess jdbc java 数据源 Druid druid org opengauss

目录

1. 遇到的问题

工作中有个db国产化的需求,需要在一个老项目中把DB从mysql更换为openGuess,将对应的驱动和Druid数据源改造后启动程序报错如下:

java.lang.IllegalStateException: dbType not support : nul, url jdbc:opengauss://127.0.0.1:15400/testdb1?autoBalance=roundrobin&targetServerType=master&loggerLevel=off
	at com.alibaba.druid.wall.WallFilter.init(WallFilter.java:167)
	at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:827)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	...

排查后发现:com.alibaba.druid.util.JdbcConstants中没有openGuess的类型

解决办法:使用 openGuess底层的PostgreSQL类型,下面有详细的操作步骤

2. 更换数据源操作步骤

1.添加pom依赖

<dependency>
    <groupId>org.opengauss</groupId>
    <artifactId>opengauss-jdbc</artifactId>
    <version>5.0.0-og</version>
</dependency>

<!--druid-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
</dependency>

2.更改jdbc.properties

druid.driverClassName = org.opengauss.Driver
druid.url = jdbc:opengauss://127.0.0.1:15400/testdb1?autoBalance=roundrobin&targetServerType=master&loggerLevel=off
druid.username = lihw
druid.password = 123456
druid.initialSize = 1
druid.minIdle = 1
druid.maxActive = 3
druid.maxWait =  900
druid.timeBetweenEvictionRunsMillis = 2000
druid.minEvictableIdleTimeMillis = 30000
druid.validationQuery = select 1
druid.testWhileIdle = true
druid.testOnBorrow = false
druid.testOnReturn = false
druid.poolPreparedStatements = false
druid.maxPoolPreparedStatementPerConnectionSize = 20
#druid.filters = stat,wall,slf4j
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql=false

注意:驱动和方言的变化

  • 数据库驱动:org.opengauss.Driver
  • 方言:org.hibernate.dialect.PostgreSQLDialect

3.初始化Druid连接池

    <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
        <property name="dbType" value="postgresql"/>
    </bean>

    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
    </bean>

    <bean id="slf4j-filter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
    </bean>

    <!--druid  openGuess-->
    <bean id="dataSourceTarget" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!-- 基本属性 url、user、password ,driverClassName-->
        <property name="driverClassName" value="${druid.driverClassName}"/>
        <property name="url" value="${druid.url}" />
        <property name="username" value="${druid.username}" />
        <property name="password" value="${druid.password}" />
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${druid.initialSize}" />
        <property name="minIdle" value="${druid.minIdle}"/>
        <property name="maxActive" value="${druid.maxActive}" />
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${druid.maxWait}" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />
        <property name="validationQuery" value="${druid.validationQuery}" />
        <property name="testWhileIdle" value="${druid.testWhileIdle}" />
        <property name="testOnBorrow" value="${druid.testOnBorrow}" />
        <property name="testOnReturn" value="${druid.testOnReturn}" />
        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <!-- 如果用Oracle,则把poolPreparedStatements配置为true,
        mysql可以配置为false。分库分表较多的数据库,建议配置为false。 -->
        <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" />
        <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
<!--        <property name="filters" value="${druid.filters}" />-->
        <property name="proxyFilters">
            <list> 
                <ref bean="wall-filter"/>
                <ref bean="stat-filter"/>
                <ref bean="slf4j-filter"/>
            </list>
        </property>
    </bean>

注意:

druid-1.1.16版本未兼容高斯的DB,使用proxyFilters过滤器,类型设置为postgresql

<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
    <property name="dbType" value="postgresql"/>
</bean>

标签:Guess,jdbc,java,数据源,Druid,druid,org,opengauss
From: https://www.cnblogs.com/lihw/p/17628322.html

相关文章

  • 如何找到 SAP Fiori Elements 应用某个字段显示值具体的数据源试读版
    笔者将自己在SAP领域16年(2007~2023)的SAPUI5(Fiori)和OData开发的技术沉淀,进行了系统的归纳和总结,分别写成了三套由浅入深的学习教程,收到了不错的反响:零基础快速学习ABAP一套适合SAPUI5开发人员循序渐进的学习教程SAPOData开发实战教程-从入门到提高这三套......
  • spring多数据源动态切换的实现原理及读写分离的应用
    简介AbstractRoutingDataSource是Spring框架中的一个抽象类,可以实现多数据源的动态切换和路由,以满足复杂的业务需求和提高系统的性能、可扩展性、灵活性。应用场景多租户支持:对于多租户的应用,根据当前租户来选择其对应的数据源,实现租户级别的隔离和数据存储。分库分表:为了提高性能......
  • spring多数据源动态切换的实现原理及读写分离的应用
    简介AbstractRoutingDataSource是Spring框架中的一个抽象类,可以实现多数据源的动态切换和路由,以满足复杂的业务需求和提高系统的性能、可扩展性、灵活性。应用场景多租户支持:对于多租户的应用,根据当前租户来选择其对应的数据源,实现租户级别的隔离和数据存储。分库分表:为了提......
  • 云监控---grafana使用mysql数据源创建dashboard--全面解析
    grafana的dashboard简介经常被用作基础设施的时间序列数据和应用程序分析的可视化。Grafana主要特性:灵活丰富的图形化选项;可以混合多种风格;支持多个数据源;拥有丰富的插件扩展;支持用户权限管理。Grafana有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘dashboard和图形编辑......
  • 支持多数据源联合查询的SQL运行引擎sycnany-SQL添加使用自定义函数
    在微服务和云原生愈发流行的今天,数据的分布也愈发脱离单库单机而更加复杂,使用的数据库类型也会更多,但业务的复杂依然会带来了大量的数据查询和导出需求,而很多时候我们很难为数据量的大部分系统创建完整的BI数仓系统,这时候你是不是觉得为这些需求查询和导出数据就会是一个十分困难且......
  • springboot 集成druid 集成mybatise
    spring加载druid和mybatisepom依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=&quo......
  • Mybatis-Plus 多数据源 @DS注解部分失效
    环境springboot+mybatis-plus在controller层一个request中有多个service调用保存接口,发现在mapper层上定义的@DS注解指定数据源部分指向了primary数据源。导致表找不到。处理猜测是不能走mybatis-plus生成的batchSave方法,将controller中多个service处理逻辑放到指定service中,......
  • 我需要 把 目标数据源中的表 获取到表的字段和字段的类型等信息,然后在目标数据源中创
    当涉及到将Oracle数据库字段类型映射为MySQL数据库字段类型时,考虑到不同数据库的差异和复杂性,以下是一个更全面的映射示例,涵盖了更多的Oracle字段类型及其可能的MySQL对应类型。importjava.util.HashMap;importjava.util.Map;publicclassOracleToMySQLTypeConverter{......
  • 【Logstash】conf文件mysql多数据源导入elasticsearch配置说明
    #inputplugin输入插件,接收事件源input{jdbc{#定义类型_1type=>"type_1"#mysql的ip、端口以及用到的数据库名jdbc_connection_string=>"jdbc:mysql://localhost:3306/数据库名"#mysql用户名jd......
  • 【Druid】Druid连接池泄露问题排查: wait millis 60000, active 50, maxActive 50
    要排查Druid连接池泄漏问题,可以按照以下步骤进行:检查代码中的连接释放:确保在使用完连接后,及时调用connection.close()或相应的释放连接的方法。确保没有遗漏或误释放连接的情况。检查连接池配置:确认连接池的参数设置是否正确。包括最大连接数、最小空闲连接数、连接超时时间等。确......