Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring BasicDataSource池在\u耗尽\u GROW行为时执行_Spring_Datasource_Connection Pooling - Fatal编程技术网

Spring BasicDataSource池在\u耗尽\u GROW行为时执行

Spring BasicDataSource池在\u耗尽\u GROW行为时执行,spring,datasource,connection-pooling,Spring,Datasource,Connection Pooling,当我们将应用程序上传到prod server上时,我们面临着奇怪的行为——有时它会停止从数据库中获取数据,好像逻辑和一切都是正确的,本地版本工作正常。远程调试后,我们发现GenericObjectPool正在阻塞线程。经过一段时间的搜索,我们找到了适合我们问题的情况。 当使用8个连接(默认值)填充时,池刚刚耗尽,默认情况下,它的行为设置为在耗尽时阻塞线程 这是我的BasicDataSource的datamodel-context.xml配置 <bean id="dataSource" cl

当我们将应用程序上传到prod server上时,我们面临着奇怪的行为——有时它会停止从数据库中获取数据,好像逻辑和一切都是正确的,本地版本工作正常。远程调试后,我们发现GenericObjectPool正在阻塞线程。经过一段时间的搜索,我们找到了适合我们问题的情况。 当使用8个连接(默认值)填充时,池刚刚耗尽,默认情况下,它的行为设置为在耗尽时阻塞线程

这是我的BasicDataSource的datamodel-context.xml配置

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="url_to_db"/>
        <property name="username" value="username"/>
        <property name="password" value="12211"/>
        <property name="defaultAutoCommit" value="false"/>
        <property name="poolPreparedStatements" value="true"/>
        <property name="initialSize" value="10"/>
        <property name="maxIdle" value="5"/>
        <property name="testOnBorrow" value="true"/>
        <property name="logAbandoned" value="true"/>
    </bean>

这里有两种解决方案-增加最大活动数量或更改池的行为。 第一个似乎很简单-将BasicDataSource中的属性maxActive设置为某个数字(如果我弄错了,请纠正我)。这种方法是不需要的,因为我们无法知道可能同时连接的确切数量

人们决定尝试第二种方法——改变行为,使之适应疲惫时的成长。 那么,有没有办法配置spring默认池来更改WhenExhausedAction行为呢?或者我应该为BasicDataSource定义自己的连接池吗?如果是,请举例说明? 我感谢您的任何意见或建议。谢谢