java.sql.SQLRecoverableException: Closed Connection

各位大佬,求教,我使用DBCP连接池时出现
java.sql.SQLRecoverableException: Closed Connection
报错。经过百度后知道,该错误是连接长时间不用,自动断开了。再次使用该连接时就会出现这个错误。
目前我修改了DBCP的配置文件,如下。请问这样配置之后能不能解决该问题,我使用的是oracle数据库

driverClassName= 
url= 
username= 
password=  

# 连接池启动时创建的初始化连接数量 
initialSize=20 

# 连接池中可同时连接的最大连接数量 
maxActive=20 

# 连接池中最大的空闲连接数量,超过的空闲连接将被释放,设置为负数表示不限制 
maxIdle=8 

# 连接池中最小的空闲连接数量,低于这个数量将创建新的连接 
minIdle=5 

# 最大等待时间,当没有可用连接时,连接池等待连接释放的最大时间 
maxWait=10000 

# 是否在归还到池中进行检验 
testOnReturn=false 

# 校验语句,必须是查询语句,至少查询一列,设置了它onBorrow才会生效 
validationQuery=select 1 from dual 

# 连接是否被空闲连接回收器(如果有)进行检验.如果检测失败, 
# 则连接将被从池中去除.设置为true后如果要生效,validationQuery参数必须设置为非空字符串 
testWhileIdle=true 

# 从池中取出连接时完成校验 ,验证不通过销毁这个connection,默认为true, 
testOnBorrow=false 

# 每30秒运行一次空闲连接回收器 
timeBetweenEvictionRunsMillis=30000 

# 连接在池中保持空闲而不被空闲连接回收器线程 
# (如果有)回收的最小时间值,单位毫秒 
minEvictableIdleTimeMillis=1800000 

#在每次空闲连接回收器线程(如果有)运行时检查的连接数量 
numTestsPerEvictionRun=3 

# 校验查询时长,如果超过,认为校验失败 
validationQueryTimeout=1 

# 设置是否自动提交 
defaultAutoCommit=flase 

2个回答

池化的链接都会有一个回收时间吧。
一个问题是什么样的需求会长时间占用链接,而且还不使用?
如果在不使用的时候,释放掉;需要用的时候再获取,这样应该就不会有问题了。
而,如果真的有这样的需求的话,或者可以单独的使用长链接进行连接,不要用池化的链接了。
希望能帮到你。

ashin8032
ashin8032 回复quge_name_harder: 释放是close,不是set null。
一年多之前 回复
ashin8032
ashin8032 回复quge_name_harder: 一般的池化链接释放都是close。池化管理的Connection会重写close方法。close方法中是把链接还给池,并不是真的关闭。
一年多之前 回复
quge_name_harder
quge_name_harder 回复: 我好像明白了,当连接池中的一定时间不用时,自动关闭。但是我之前配置文件太简陋了,没有设置回收。所以我初始化的连接超过这个时间后都关闭了,但是没有回收。导致再次使用时报错。
一年多之前 回复
quge_name_harder
quge_name_harder 之前报错时DBCP配置文件中只设置了驱动器,账号密码,初始连接数,最大最小连接数,这几个参数。但是在程序中,我的确是按照您的说法:“不使用的时候,释放掉(将连接设置为null);需要用的时候再获取”。今天中午大概两个小时没用电脑,外加电脑断网了,然后查询时就报了这个错。我才将配置文件改成上面这样的。按照我的理解,不用就释放掉,用的时候再取,应该不会出现这种问啊
一年多之前 回复

最大等待时间,当没有可用连接时,连接池等待连接释放的最大时间

maxWait=10000 这句不是明确配置的最大等待时间吗 支持楼上

u012976158
强化脑细胞 回复quge_name_harder: 你理解的是对的,长时间不用,看错了,#在空闲连接回收器线程运行期间休眠的时间值(以毫秒为单位). timeBetweenEvictionRunsMillis=10000,你可以设置空闲链接回收
一年多之前 回复
quge_name_harder
quge_name_harder 我理解这句的意思是连接池中的连接都用完了,超过maxWait时再创建新的连接。如果在这段时间内,有连接被归还到连接池中,就不用创建新的连接了。不知道我这样理解对不对
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐