Druid “loopWaitCount 0, wait millis 6001” 報錯

    今天總結下自己使用Druid遇到的一個錯誤“loopWaitCount 0, wait millis 6001”

報錯信息:

Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: 
Could not get JDBC Connection; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: 
loopWaitCount 0, wait millis 6001
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:66)
at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:279)
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:69)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:56)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:141)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:124)
at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:46)
at com.tzt.workLog.core.mybatis.plugin.SelectCountSqlInterceptor.intercept(SelectCountSqlInterceptor.java:49)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:57)
at com.sun.proxy.$Proxy155.query(Unknown Source)
at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:46)
at com.tzt.workLog.core.mybatis.plugin.OffsetLimitInterceptor.intercept(OffsetLimitInterceptor.java:53)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:57)
at com.sun.proxy.$Proxy155.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:101)
... 55 more

    系統用的框架是Spring+SpringMVC+Mybatis(SSM),其中把涉及到的兩個配置部分列出來:

spring_service.xml
<!-- 配置數據庫連接 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本屬性 url、user、password -->
<property name="driverClassName" value="${jdbc-0.druid.driver-class}" />
<property name="url"             value="${jdbc-0.druid.driver-url}" />
<property name="username"        value="${jdbc-0.user}" />
<property name="password"        value="${jdbc-0.password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${jdbc-0.druid.connection-initial-size}" />
<property name="minIdle"     value="${jdbc-0.druid.connection-minimum-size}" />
<property name="maxActive"   value="${jdbc-0.druid.connection-maximum-size}" />
<!-- 配置獲取連接等待超時的時間 -->
<property name="maxWait"     value="${jdbc-0.druid.connection-maxwait-time}" />
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${jdbc-0.druid.connection-maxactive-time}" />
<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis"    value="${jdbc-0.druid.connection-minlive-time}" />
<property name="validationQuery" value="${jdbc-0.druid.connection-test-sql}" />
<property name="testWhileIdle"   value="${jdbc-0.druid.test-while-idle}" />
<property name="testOnBorrow"    value="${jdbc-0.druid.test-on-borrow}" />
<property name="testOnReturn"    value="${jdbc-0.druid.test-on-return}" />
<!-- 打開PSCache,並且指定每個連接上PSCache的大小 -->
<property name="poolPreparedStatements" value="${jdbc-0.druid.pool-prepared-statements}" />
<!-- property name="maxPoolPreparedStatementPerConnectionSize" value="20" /-->
<!-- 數據庫密碼是否加密 -->
<property name="connectionProperties" value="config.decrypt=${jdbc-0.druid.config.decrypt}" />
   <!-- 配置監控統計攔截的filters -->
<property name="filters" value="stat,config"/>
</bean>
    db.properties:
    
jdbc-0.druid.alias=productDBPool
localhost
jdbc-0.druid.driver-class=com.mysql.jdbc.Driver
jdbc-0.druid.driver-url=jdbc:mysql://127.0.0.1:3306/zentao?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull
jdbc-0.user=root
jdbc-0.password=root
jdbc-0.druid.connection-initial-size=10
jdbc-0.druid.connection-minimum-size=10
jdbc-0.druid.connection-maximum-size=200
jdbc-0.druid.connection-maxwait-time=6000
jdbc-0.druid.connection-maxactive-time=6000
jdbc-0.druid.connection-minlive-time=300000
jdbc-0.druid.connection-test-sql=select 1 from dual
jdbc-0.druid.pool-prepared-statements=false
jdbc-0.druid.test-while-idle=true
jdbc-0.druid.test-on-borrow=false
jdbc-0.druid.test-on-return=false
jdbc-0.druid.config.decrypt=false


總結,原因應該是配置中jdbc-0.druid.connection-maximum-size值設置太小,剛開始設置50,後來設置爲200

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章