解决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,没有效果

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

(0)

相关推荐

  • SpringBoot使用Druid数据源的配置方法

    Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池) 一.依赖 为了测试,使用jdbcTemplate <!-- jdbcTemplate --> <dependency> <groupId>org.springframework.boot</groupId> <artifa

  • 详解Spring Boot整合Mybatis实现 Druid多数据源配置

    一.多数据源的应用场景 目前,业界流行的数据操作框架是 Mybatis,那 Druid 是什么呢? Druid 是 Java 的数据库连接池组件.Druid 能够提供强大的监控和扩展功能.比如可以监控 SQL ,在监控业务可以查询慢查询 SQL 列表等.Druid 核心主要包括三部分: 1. DruidDriver 代理 Driver,能够提供基于 Filter-Chain 模式的插件体系. 2. DruidDataSource 高效可管理的数据库连接池 3. SQLParser 当业务数据量达

  • springboot 动态数据源的实现方法(Mybatis+Druid)

    Spring多数据源实现的方式大概有2中,一种是新建多个MapperScan扫描不同包,另外一种则是通过继承AbstractRoutingDataSource实现动态路由.今天作者主要基于后者做的实现,且方式1的实现比较简单这里不做过多探讨. 实现方式 方式1的实现(核心代码): @Configuration @MapperScan(basePackages = "com.goofly.test1", sqlSessionTemplateRef = "test1SqlSess

  • 通过springboot+mybatis+druid配置动态数据源

    一.建数据库和表 1.数据库demo1放一张user表 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NU

  • Spring Boot+Mybatis+Druid+PageHelper实现多数据源并分页的方法

    前言 本篇文章主要讲述的是SpringBoot整合Mybatis.Druid和PageHelper 并实现多数据源和分页.其中SpringBoot整合Mybatis这块,在之前的的一篇文章中已经讲述了,这里就不过多说明了.重点是讲述在多数据源下的如何配置使用Druid和PageHelper . Druid介绍和使用 在使用Druid之前,先来简单的了解下Druid. Druid是一个数据库连接池.Druid可以说是目前最好的数据库连接池!因其优秀的功能.性能和扩展性方面,深受开发人员的青睐. D

  • SpringBoot整合Druid数据源过程详解

    这篇文章主要介绍了SpringBoot整合Druid数据源过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.数据库结构 2.项目结构 3.pom.xml文件 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</ar

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

    Druid动态数据源配置 主要是继承AbstractRoutingDataSource再通过AOP来实现动态数据源切换. 下面给大家介绍Druid动态配置数据源重复刷错误日志问题,具体内容如下所示: 问题描述 功能需求: 使用druid数据库连接池实现 动态的配置数据源功能:IP.端口.用户名.密码都是用户页面手动输入,可以测试连接,保存数据源. 问题说明: 既然是用户自己配置的数据源,就无法避免输入错误,连接失败等情况. 预期情况:用户输入的配置错误,测试连接时,会返回连接失败的信息. 实际情

  • druid多数据源配置+Datasurce动态切换方式

    目录 druid多数据源配置+Datasurce动态切换 AbstractRoutingDataSource 数据源动态切换 例子 配置多数据源并实现Druid自动切换 配置yml文件 主数据源配置 从数据源配置 使用dao 日志 druid多数据源配置+Datasurce动态切换 AbstractRoutingDataSource 数据源动态切换 spring 使用AbstractRoutingDataSource自定义动态数据源时的事务处理, 需要继承spring的AbstractRouti

  • Spring Boot + Mybatis多数据源和动态数据源配置方法

    网上的文章基本上都是只有多数据源或只有动态数据源,而最近的项目需要同时使用两种方式,记录一下配置方法供大家参考. 应用场景 项目需要同时连接两个不同的数据库A, B,并且它们都为主从架构,一台写库,多台读库. 多数据源 首先要将spring boot自带的DataSourceAutoConfiguration禁掉,因为它会读取application.properties文件的spring.datasource.*属性并自动配置单数据源.在@SpringBootApplication注解中添加ex

  • 通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中也描述了):只适用于数据库数量不多且固定的情况.针对数据库动态增加的情况无能为力. 下面讲的方案能支持数据库动态增删,数量不限. 数据库环境准备 下面一Mysql为例,先在本地建3个数据库用于测试.需要说明的是本方案不限数据库数量,支持不同的数据库部署在不同的服务器上.如图所示db_project_001.d

  • @Transactional跟@DS动态数据源注解冲突的解决

    目录 @Transactional跟@DS动态数据源注解冲突 背景 @Transactional执行流程 解决方法 动态数据源切换失败 由事务@Transactional注解导致动态数据源切换失效的问题 @Transactional跟@DS动态数据源注解冲突 背景 前阵子写一个项目时,有个需求是要往3个库,3个表里插入数据,在同一个方法里,公司是用baomidou的@DS注解来实现配置动态数据源的.这是背景,然后呢,我在一个service方法里,就操作了这三张表,同时,我还加上了@Transac

  • springboot 多数据源配置不生效遇到的坑及解决

    目录 多数据源配置不生效遇到的坑 解决方案 踩坑SpringBoot配置多数据源,循环引用问题 解决办法 多数据源配置不生效遇到的坑 ** 同步数据时遇到多个数据源切换的问题,配置了yml文件时候发现启动的时候不加载数据源的配置. ** spring: datasource: db1: driver-class-name:xxxxxxx url:jdbc:xxxxxxx username:root password:111111 db2: driver-class-name:xxxxxx url

  • SpringBoot整合MyBatisPlus配置动态数据源的方法

    MybatisPlus特性 •无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 •损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 •强大的 CRUD 操作:内置通用 Mapper.通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 •支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错 •支持多种数据库:支持 MySQL.MariaDB.Ora

  • Spring动态多数据源配置实例Demo

    最近由于咨询spring如何配置多数据源的人很多,一一回答又比较麻烦,而且以前的博文中的配置也是有问题,因此特此重新发布一个Demo给大家. Demo中共有两个数据源,即MySQL和Oracle,并已经进行简单测试,动态切换数据源是没有问题的,希望借此Demo能帮助到大家. Demo下载地址: Spring动态切换多数据源Demo:http://xiazai.jb51.net/201701/yuanma/dynamicDatasourceDemo_jb51.rar 另外我给些说明,阐述下多数据源

随机推荐