近做一个定时任务类型的项目,此项目对数据库的访问间隔较长。这样就会导致测试的时候好好的,投入生产之后问题出现了。查看日志,原来是数据库连接池超时。网上看了一些解决方案,但是有些都不能解决问题。比较了几篇,经过自己实践成功后,将自己的连接池配置在这里分享下。
其他参数就不多说了,针对连接池失效的几个重要参数做下说明。
1、testOnReturn,testOnBorrow这两个参数为true,表示会在每次请求之前和之后进行连接池测试,如果连接失效,就会将这条连接对象销毁,创建一个新的连接对象,但是本次数据库操作也就失败了。对于读操作可能没什么问题,再请求一次就行了,但对于充值、定时任务等重要写操作来说还不够完美。(PS:使用这两个参数,一定要配置validationQuery参数,这样才会生效。)
2、为了解决以上问题,保证每次操作都有正常的连接池使用,我们来了解一下testWhileIdle参数。这个参数为true时候,表示空闲时是进行验证,检查对象是否有效。然后minEvictableIdleTimeMillis配合timeBetweenEvictionRunsMillis,每过timeBetweenEvictionRunsMillis秒对连接池进行一次检测,将对象闲置时间超过minEvictableIdleTimeMillis秒的对象进行销毁,创建新的对象来取代。这样就能保证时刻都有正常的连接池对象存在。
<bean id="readDS" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${slave.jdbc.driverClassName}"/> <property name="url" value="${slave.jdbc.url}"/> <property name="username" value="${slave.jdbc.username}"/> <property name="password" value="${slave.jdbc.password}"/> <property name="maxActive" value="300" /> <property name="maxIdle" value="50" /> <property name="minIdle" value="5" /> <property name="maxWait" value="30000" /> <property name="validationQuery" value="select current_date()" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <property name="removeAbandoned" value="true" /> <property name="removeAbandonedTimeout" value="90" /> <property name="logAbandoned" value="false" /> <property name= "timeBetweenEvictionRunsMillis" value="30000" /> <property name= "numTestsPerEvictionRun" value="30" /> <property name="minEvictableIdleTimeMillis" value="1800000" /> </bean>
相关推荐
4. 监控与调整:连接池会监控连接状态,定期检查和回收失效的连接,同时根据需求动态调整池中连接的数量。 连接池的优缺点: 优点: 1. 提高性能:通过重用已存在的连接,减少了创建和销毁连接的时间。 2. 资源优化...
描述中提到的“解决连接池不够的问题,多连接的问题”,意味着在实际项目开发中,可能会遇到因为数据库连接数量不足或者频繁创建和关闭连接导致的性能瓶颈。通过使用连接池,开发者可以在应用启动时预先分配一定数量...
数据库连接池是数据库管理中的重要概念,特别是在高并发和大数据量的应用场景下,它能显著提升性能并降低系统资源消耗。在C#编程环境中,我们可以使用自定义的数据库连接池来实现这一功能。本篇文章将深入探讨“C#...
3. **连接池管理**:连接池需要监控连接的状态,确保连接的有效性,当检测到连接异常时,会自动移除并重新创建新的连接。 4. **连接扩展**:当连接池中的连接被全部占用时,如果请求量持续增加,连接池可能会根据...
8. 在 JAVA 中调用连接池 三、Tomcat 连接池配置的原理 Tomcat 连接池配置的原理是基于 Java 连接池技术的,它可以将数据库连接池化,从而提高数据访问的速度和安全性。Tomcat 连接池配置可以分为两个部分:全局...
本文将深入探讨OkHttp中的连接池实现,包括连接对象的添加、移除机制以及其工作原理。 首先,我们需要了解什么是连接池。连接池是一种资源管理技术,用于存储和管理预先建立的网络连接,避免每次请求都创建新的TCP...
要解决连接空闲8小时自动断开的问题,可以使用连接池机制来管理数据库连接。常用的连接池机制有 C3P0、Proxool、DBCP 等。在本例中,可以使用 C3P0 连接池机制来解决问题。 知识点4:C3P0 连接池机制 C3P0 是一个...
Tomcat 连接池和阿里 Druid 连接池的配置和比较 Tomcat 连接池是一种基于 Java 的数据库连接池实现,提供了高效、可靠的数据库连接管理。阿里 Druid 连接池是阿里巴巴开发的开源连接池,提供了高性能、可靠的数据库...
`Pomelo`是社区维护的MySQL Entity Framework Core提供者,而`MySql.Data`则是官方提供的非Entity Framework解决方案。 2. 配置连接字符串 在应用程序配置文件(如appsettings.json)中,配置MySQL数据库的连接...
C#数据库连接池是一种管理数据库连接的技术,通过复用已存在的连接而不是每次请求时都创建新的连接,从而提高数据库操作的性能和效率。本文将深入探讨C#中数据库连接池的工作原理、实现方式以及最佳实践。 ### ...
Java FTP连接池是一种用于管理FTP(文件传输协议)连接的资源池,它的主要目标是提高应用程序的性能和效率。在传统的FTP操作中,每次需要连接到FTP服务器时都会创建一个新的连接,这会消耗大量时间和系统资源。而...
为了解决这个问题,开发人员通常会使用连接池来管理和复用已建立的Socket连接。 首先,我们来看一下Socket的基本概念。Socket是网络编程中的一个抽象概念,它代表了两台机器间的一个双向通信链路。在Java中,`java...
在IT行业中,数据库连接管理是应用系统性能优化的关键一环,而JDBC连接池就是解决这一问题的有效工具。本文将深入探讨如何自定义JDBC连接池,并对常用的连接池技术进行介绍。 首先,自定义JDBC连接池的核心在于管理...
在分布式系统中,RabbitMQ作为一款广泛应用的消息队列服务,为系统间的异步通信提供了高效可靠的解决方案。然而,频繁地创建和销毁客户端连接会带来性能开销,因此,使用连接池(Connection Pool)来管理RabbitMQ...
3. **错误处理**:正确处理连接异常,防止因个别连接问题导致整个连接池失效。 4. **事务管理**:在使用连接池时,需注意事务的范围和隔离级别,避免长时间持有连接。 总的来说,Unidac连接池是提高数据库应用性能...
Java JDBC 数据库连接池...Java JDBC 数据库连接池技术可以解决频繁的数据库连接操作对系统资源的占用,提高系统的性能和可靠性。同时,连接池技术也可以和其它技术结合使用,例如 EJB 技术,实现高效的数据库访问。
Oracle数据库提供了一套完整的数据管理解决方案,包括事务处理、数据仓库、网络数据库、安全性等。它的PL/SQL语言允许开发者编写存储过程和触发器,增强了数据库的灵活性和安全性。Oracle还支持分布式数据库系统,...
Java数据库连接池驱动是Java应用程序在访问数据库时用于优化资源管理的一种技术。它提供了一种在多个数据库操作之间重用数据库连接的方式,从而避免了频繁创建和关闭连接带来的性能开销。连接池的核心思想是池化资源...
"Java连接SAP系统所用的JCo连接池的配置和使用" Java连接SAP系统所用的JCo连接池的配置和使用是指在Java应用程序中使用JCo连接池来连接SAP R3系统的技术。JCo(Java Connector)是SAP提供的一种Java API,用于连接...