java 用多线程测试数据库连接池抛出异常

java 用多线程测试数据库连接池抛出异常,第1张

这不是很明显吗?

closeConnection(Connection connection)这个方法里无论如何都会把连接close掉,而连接池实际上应该只是释放连接而并非直接把连接关掉。真正关掉连接的 *** 作应该在关闭连接池的时候或者更为有效的连接管理策略中。

建议别关注配置了。 看看你的代码有没有问题,获取了连接却没有关闭,导致连接越用越多,最后报获取不到有效的连接。

我只是批量处理了一些数据 其中调用了一些查询方法 用的是hibernate 并没有获取连接 只是查询的数据量比较大 不知道什么原因 总是抱连接超时

因为请求过多,所以Session要关闭,或者在配置里把连接池设置大一些

出现这种问题从以下几个方面排查:

1、网络不稳定,这种情况只会出现在调用机器和redis服务器不在同一台机器的情况,如果调用本机redis请忽略。

2、使用了连接池,并发较大,连接池配置的最大连接数过小,客户端从连接池获取连接时,如果没有可用连接就阻塞当前线程直到有可用连接,等待时间超过配置的超时时间后会抛出连接超时异常。

3、同样是使用连接池的情况,从连接池获取连接,使用完成后没有释放连接,导致连接池链接耗尽。

4、还有可能是硬件性能瓶颈,比如单节点的redis,但是需要支持特别大的并发量,无论怎么优化配置都是徒劳的,这种情况就需要考虑做读写分离,搭建redis集群等,

推荐在使用连接池的情况下connection对象每次用完后都关闭。 这种情况我看应该修改一下jdbc连接池的配置。添加如下配置: removeAbandoned:true removeAbandonedTimeout:120 testOnBorrow:true logAbandoned:true

>

<!--连接池中保留的最小连接数。-->

<property name="minPoolSize">

<value>5</value>

</property>

<!--连接池中保留的最大连接数。Default: 15 -->

<property name="maxPoolSize">

<value>40</value>

</property>

<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->

<property name="initialPoolSize">

<value>10</value>

</property>

<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->

<property name="maxIdleTime">

<value>60</value>

</property>

<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->

<property name="acquireIncrement">

<value>3</value>

</property>

<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements

属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。

如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->

<property name="maxStatements">

<value>0</value>

</property>

<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->

<property name="idleConnectionTestPeriod">

<value>60</value>

</property>

<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->

<property name="acquireRetryAttempts">

<value>30</value>

</property>

<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效

保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试

获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->

<property name="breakAfterAcquireFailure">

<value>true</value>

</property>

<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的

时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable

等方法来提升连接测试的性能。Default: false -->

<property name="testConnectionOnCheckout">

<value>false</value>

</property>

以上就是关于java 用多线程测试数据库连接池抛出异常全部的内容,包括:java 用多线程测试数据库连接池抛出异常、连接池连接不上,为什么急在线等,求大神帮忙、java使用redis时不时的报没有可用的链接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9774509.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存