解决Druid动态数据源配置重复刷错误日志的问题

 更新时间:2021年05月12日 14:31:53   作者:小妖云汐  
使用druid数据库连接池实现动态的配置数据源功能,在配置过程中出现一个问题既然是用户自己配置的数据源,就无法避免输入错误,连接失败等情况,关于这个问题怎么处理呢,今天小编通过本文给大家详细说明下,感兴趣的朋友一起看看吧

Druid动态数据源配置 主要是继承AbstractRoutingDataSource再通过AOP来实现动态数据源切换.

下面给大家介绍Druid动态配置数据源重复刷错误日志问题,具体内容如下所示:

问题描述

功能需求
使用druid数据库连接池实现 动态的配置数据源功能:IP、端口、用户名、密码都是用户页面手动输入,可以测试连接,保存数据源。

问题说明:
既然是用户自己配置的数据源,就无法避免输入错误,连接失败等情况。

预期情况:用户输入的配置错误,测试连接时,会返回连接失败的信息。

实际情况:数据源测试连接,连接失败后:

后台一直打印错误信息,一直自动重连

方法被阻塞无返回信息,导致前端页面一直处于等待状态

错误信息】:

com.alibaba.druid.pool.DruidDataSource-create connection SQLException, url:xxx, errorCode 0, state 08S01
The last packet sent successfully to the server was 0 milliseconds ago.
The driver has not received any packets from the server.

原始代码】:

public static void getDataSource(DataConfig dataConfig) throws Exception{
	try {
		Properties properties = new Properties();
		properties.setProperty("driverClassName",dataConfig.getDriverClassName());
		properties.setProperty("url",dataConfig.getUrl());
		properties.setProperty("username",dataConfig.getUserName());
		properties.setProperty("password",dataConfig.getPassWord());
		DataSource ds = DruidDataSourceFactory.createDataSource(properties);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

解决办法

参数说明】

参数 解释
connectionErrorRetryAttempts 连接出错后再尝试连接次数
breakAfterAcquireFailure 数据库服务宕机自动重连机制
maxWait 超时等待时间
修改后的代码】

public static void getDataSource(DataConfig dataConfig) throws Exception{
	try {
		Properties properties = new Properties();
		properties.setProperty("driverClassName",dataConfig.getDriverClassName());
		properties.setProperty("url",dataConfig.getUrl());
		properties.setProperty("username",dataConfig.getUserName());
		properties.setProperty("password",dataConfig.getPassWord());
		properties.setProperty("maxWait","500");//如果失败,当前的请求可以返回
		DruidDataSource druidDataSource = (DruidDataSource)DruidDataSourceFactory.createDataSource(properties);
		druidDataSource.setConnectionErrorRetryAttempts(0);// 失败后重连的次数
		druidDataSource.setBreakAfterAcquireFailure(true);//请求失败之后中断
		DataSource ds = druidDataSource;//如果有需要使用javax.sql.DataSource的话
	} catch (Exception e) {
		e.printStackTrace();
	}
}

踩坑总结

不要在properties中配置connectionErrorRetryAttempts和breakAfterAcquireFailure,没有效果

1111111

连接失败的具体错误信息,catch不到,源码中已经catch了异常信息,做了相关处理

2222222

到此这篇关于解决Druid动态数据源配置重复刷错误日志的问题的文章就介绍到这了,更多相关Druid动态数据源配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Hadoop使用hdfs指令查看hdfs目录的根目录显示被拒的原因及解决方案

    Hadoop使用hdfs指令查看hdfs目录的根目录显示被拒的原因及解决方案

    这篇文章主要介绍了Hadoop使用hdfs指令查看hdfs目录的根目录显示被拒的原因及解决方案,分布式部署hadoop,服务机只有namenode节点,主机包含其他所有节点,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • MybatisPlus,无XML分分钟实现CRUD操作

    MybatisPlus,无XML分分钟实现CRUD操作

    这篇文章主要介绍了MybatisPlus,无XML分分钟实现CRUD操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Java实现马踏棋盘算法

    Java实现马踏棋盘算法

    这篇文章主要为大家详细介绍了Java实现马踏棋盘算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java那些鲜为人知的关键字volatile详析

    Java那些鲜为人知的关键字volatile详析

    这篇文章主要给大家介绍了关于Java那些鲜为人知的关键字volatile的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • IDEA教程之Activiti插件图文详解

    IDEA教程之Activiti插件图文详解

    这篇文章主要介绍了IDEA教程之Activiti插件图文详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 如何通过RabbitMq实现动态定时任务详解

    如何通过RabbitMq实现动态定时任务详解

    工作中经常会有定时任务的需求,常见的做法可以使用Timer、Quartz、Hangfire等组件,这次想尝试下新的思路,使用RabbitMQ死信队列的机制来实现定时任务,下面这篇文章主要给大家介绍了关于如何通过RabbitMq实现动态定时任务的相关资料,需要的朋友可以参考下
    2022-01-01
  • Java中的线程池如何实现线程复用

    Java中的线程池如何实现线程复用

    这篇文章主要介绍了Java中的线程池如何实现线程复用问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 在Java的JDBC使用中设置事务回滚的保存点的方法

    在Java的JDBC使用中设置事务回滚的保存点的方法

    这篇文章主要介绍了在Java的JDBC使用中设置事务回滚的保存点的方法,JDBC是Java用于连接各种数据库的API,需要的朋友可以参考下
    2015-12-12
  • Java如何基于command调用openssl生成私钥证书

    Java如何基于command调用openssl生成私钥证书

    这篇文章主要介绍了Java如何基于command调用openssl生成私钥证书,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java实现顺序表的操作

    Java实现顺序表的操作

    这篇文章主要为大家详细介绍了Java实现顺序表的基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论