连接池

java.lang.AbstractMethodError: Method org/apache/commons/dbcp/DelegatingResultSet.getNString(Ljava/l

风流意气都作罢 提交于 2020-01-17 14:52:51
更换jar包版本 commons-dbcp-1.2.2.jar commons-pool-1.3.jar 更换为 commons-dbcp2-2.5.0.jar commons-pool2-2.6.0.jar 然后更改数据库连接池配置 org.apache.commons.dbcp.BasicDataSource 改为 org.apache.commons.dbcp2.BasicDataSource 参数: maxWait 改为 maxWaitMillis maxActive 改为 maxTotal <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="$

Redis连接数不释放问题

江枫思渺然 提交于 2020-01-17 03:32:36
1、发现问题 我用的是springboot构建的项目,网关中连接redis存放每次请求的参数,以此达到不能重复请求的目的。 发现经常控制台报远程主机关闭一个连接的错误,每次报这样的错误,我就必须重启项目才行。非常麻烦,之前没有时间深究,现在今天痛下决心向百度请教一下。 2、定位问题 查询redis相关命令 客户端远程连接redis redis-cli.exe -h IP -p 6379 -a 密码 查看连接数 info clients 发现两千多连接,肯定不正常,因为是测试环境。 查看超时时间 config get timeout 为0 为0代表无限制 一直连接 设置超时时间 config set timeout 100 设置为100s 过几分钟后 再次查看 会发现变的很少了 3、问题本质 Redis的客户端超时机制 在业务场景中,一般会由Redis客户端进行连接资源管理,例如分配连接、监控连接状态、回收连接池资源等。默认设置下,Redis不会主动断开连接,即使这个客户端已经空闲了很长时间。但在业务核心应用中,建议配置timeout参数以使Redis具有主动回收资源的能力。否则,如果客户端出现异常,连接池资源得不到及时回收,可能因空闲连接占满连接池导致服务崩溃。核心应用出现这样的问题可能引发整个业务的混乱,后果严重。 timeout参数值的单位为秒(s),取值范围为0-100000

Tomcat配置JNDI数据源

守給你的承諾、 提交于 2020-01-17 03:30:54
经过3个多小时的努力,配置JNDI数据源(主要是通过DBCP连接池)终于搞定~ 还是Tomcat官方的说明好,不过全是英文的,大概还看得懂. 百度上那么花花绿绿的太多了,一个也没成功!... 本例使用的数据库为Ms SQL Server 2000,对于其它数据库只是修改一下相应的参数即可, 服务器是Tomcat5.5, 与之间的版本配置连接池最简便 自己总结了一下,希望起到一个抛砖引玉的作用 总结: 第一步: 将驱动程序(jar包)放到tomcat安装目录下的common\lib文件夹下 第二步: 在Tomcat的webapps目录随便创建一个工程目录,例如myjdbc。在myjdbc目录下创建META-INF目录,在此目录下创建一个context.xml文件,里面的内容如下: <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="sa" password="" driverClassName="net.sourceforge.jtds.jdbc.Driver" url="jdbc

数据库 ----jdbc连接池的弊端

寵の児 提交于 2020-01-16 23:08:11
jdbc连接池的弊端 1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。 设想:使用数据库连接池管理数据库连接。 2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。 设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。 3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。 设想:将sql语句及占位符号和参数全部配置在xml中。 4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。 设想:将查询的结果集,自动映射成java对象。 来源: https://www.cnblogs.com/JonaLin/p/11572604.html

SQL: Cannot create JDBC driver of class '' for connect URL

我怕爱的太早我们不能终老 提交于 2020-01-16 04:30:40
使用数据库数据源的web 项目,发布后,访问数据库500报错: 浏览器端: 控制台: 数据库连接池在不启动Tomcat的情况下,测试类通过,没有问题。 一旦在服务器发布,就会出现问题,考虑是Tomcat的连接池配置除了问题。 错误提示是:找不到jdbc驱动,但是提示信息里的class值为null,所以,应该是Tomcat没有找到驱动 1、检查是否有jar包:存在,没有问题。 2、检查jar包位置:是在src 下。后来转移到web下,还是没效果。网上资料说:在tomcat6.0中设置jdbc数据源时,jdbc驱动要放在TOMCAT_HOME/lib目录下,绝不能放在web-inf/lib/下面:否则tomcat就会报错说找不到驱动。eclipse中的webcontent是虚拟路径。 3、配置文件:缺失。 解决方案: 增加了配置文件: content.xml 1 <Context> 2 <Resource 3 auth="Container" 4 driverClassName="com.mysql.jdbc.Driver" 5 maxActive="100" 6 maxIdle="40" 7 maxWait="4000" 8 name="jdbc/fish" 9 username="root" 10 password="root" 11 type="javax.sql

在Tomcat中配置JNDI数据源

隐身守侯 提交于 2020-01-15 08:38:12
先了解一些基本概念。 JNDI JNDI是用于向Java程序提供目录和命名功能的API。 它被设计成独立于特定的目录服务,各种各样的目录都可以通过相同的方式进行访问。可以简单地把JNDI理解为一种将对象和名字绑定的技术,对象工厂负责生产出对象,这些对象都和惟一的名字绑定。外部程序可以通过名字来获取对某个对象的引用。 数据源 数据源(DataSource)是一个用来存储数据的工具,它可以是复杂的大型企业级数据库,也可以是简单得只有行和列的文件。它可以位于在服务器端,也可以位于客服端。 一个DataSource对象就是一个用于提供连接数据库的工具,它通常与连接池共同使用。在数据源初始化时,事先建立了多个数据库连接,这些数据库连接保存在连接池(Connect Pool)中。当Java程序访问数据库时,只需要从连接池中取出空闲状态的数据库连接;当程序访问数据库结束,再将数据库连接放回连接池。 在JDBC 2.0或JDBC 3.0中,所有的数据库驱动程序提供商必须提供一个实现了DataSource接口的类,并要求使用数据源必须首先在JNDI中注册该数据源对象。 相比于传统的DriverManager接口,使用DataSource对象建立数据库的连接更加高效,虽然两者的使用范围都很相似,但DataSource比起DriverManager有两个方面的优势: 灵活

Jedis Could not get a resource from the pool

一曲冷凌霜 提交于 2020-01-15 04:32:33
Jedis Could not get a resource from the pool 一、错误描述 二、逐一排查 2.1 网络检查 2.2 JedisPool连接数设置检查 2.3 JedisPool连接池代码检查 2.4 检查是否发生nf_conntrack丢包 2.5 检查是否TIME_WAIT问题 2.6 检查是否DNS问题 三、总结 一、错误描述 使用Jedis连接池模式的时候容易出现的错误是无法获取连接池 redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 对于这类问题的原因有几类,可以根据以下一一进行排查 二、逐一排查 2.1 网络检查 首先检查是否网络问题,可以通过 telnet host 6379 进行简单测试,连上之后auth 密码回车查看是否返回+OKrn,如果能够正确返回继续检查ping请求或者读写请求是否正常返回,操作多次排查网络问题影响。 2.2 JedisPool连接数设置检查 JedisPool使用的时候需要进行连接池的设置,用户在超过MaxTotal连接数的时候也会出现获取不到连接池的情况,这个时候可以在访问客户端上通过 netstat -an | grep 6379 | grep EST | wc -l

DBCP的配置参数

一笑奈何 提交于 2020-01-14 08:24:08
tomcatde DHCP的配置 <Resource driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" logAbandoned="true" maxActive="20" maxIdle="2" maxWait="5000" name="system" removeAbandonedTimeout="60" removeAbandoned="true" password="xx" type="javax.sql.DataSource" url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=base" username="sa"/> 当中的 logAbandoned="true" removeAbandoned="true" removeAbandonedTimeout="60" 就是用来配置数据库断开后自动连接的。 数据库连接池会在启动时就建立所需的若干连接,并一直保持连接状态, 但是当数据库服务停止后,这些连接就被外部因素给中断了 网上优化了的配置信息: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property

golang 数据库

走远了吗. 提交于 2020-01-14 05:07:06
database/sql包 golang封装了 database/sql 标准库,它提供了用于处理sql相关的操作的接口。而接口的实现则交给了数据库驱动 写代码逻辑的时候,不用考虑后端的具体数据库,即使迁移数据库类型的时候,也只需要迁移相应的驱动即可,而不用修改代码 使用数据库时,除了 database/sql 包本身,还需要引入想使用的特定数据库驱 sql.Open() 不建立与数据库的任何连接,也不会验证驱动连接参数。相反,它只是准备数据库抽象以供以后使用 首次真正的连接底层数据存储区将在第一次需要时懒惰地建立。 如果你想立即 检查数据库是否可用 (例如,检查是否可以建立网络连接并登陆),请使用 db.Ping() 来执行此操作 sql.DB 对象被设计为长连接 不要经常 Open() 和 Close() 数据库对象 否则会遇到诸如重复使用和连接共享不足,耗尽可用的网络资源以及由于TIME_WAIT中剩余大量TCP连接而导致的零星故障的状态 应该在需要是把 sql.DB 对象作为参数,或在全局范围内使其可用 rows.Close() 是一种无害的操作,如果它已经关闭,所以你可以多次调用它 请注意首先检查错误,如果没有错误再调用 rows.Close() ,否则会导致运行时的panic 不要在循环中用defer推迟。延迟语句在函数退出之前不会执行,所以长时间运行的函数不应该使用它

mybatis总配置文件的dataSource的type属性介绍

為{幸葍}努か 提交于 2020-01-13 23:58:09
mybatis总配置文件的datasource的type介绍 在mybatis的总配置文件中有一个标签 <dataSource type="pooled"><dataSource> 在里面可以放入配置数据库的基本连接信息 (driver,url,username,password) 同时在该标签上有一个属性type,它表示mybatis获取连接的方式。type属性有三个值,分别为unPooled,pooled和JNDI。 unpooled unPooled表示获取连接时不是从连接池中获取,而是直接new了一个连接返回,我们可以看看其内部的实现: 可以看到它是内部创建了一个连接给你返回。 pooled pooled是利用了连接池的思想,它内部的原理大致是这样的: 首先先判断空闲连接池内有没有空闲连接,如果还有则给你返回一个空闲连接。 如果没有空闲连接,则去活动连接池内看看还有没有位置,如果还有,则new一个连接给你返回 如果活动连接池没有位置了,则返回在活动连接池使用最久的连接。意思就是给你返回一个在活动连接池内待最久的连接。 内部源码: JNDI 这个属性内部是使用了JNDI技术,每个服务器对应的连接池技术都不一样,比如tomcat服务器使用的dpcp连接池。这个属性值只能在web工程和maven的web工程中使用。因为不太了解,不做过多介绍。 上述的三个属性值都实现java