OracleTimeoutPollingThread怎么解决?

tomorrower 2020-07-28 11:07:00
我的oracle连接池,关闭tomcat的时候有一个严重错误

<!-- druid数据库数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${master.jdbc.driverClassName}" />
<property name="url" value="${master.jdbc.url}" />
<property name="username" value="${master.jdbc.username}" />
<property name="password" value="${master.jdbc.password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="2" />
<!-- 连接池最大使用连接数量 -->
<property name="maxActive" value="10" />
<!-- 连接池最小空闲 -->
<property name="minIdle" value="3" />
<!-- 获取连接最大等待时间 -->
<!--maxWait: 连接池获取连接超时等待时间以毫秒为单位 6000毫秒/1000等于6秒 -->
<property name="maxWait" value="6000" />

<!-- 这里配置提交方式,默认就是TRUE,如果自动提交就可以不用配置 -->
<property name="defaultAutoCommit" value="true" />

<!-- poolPreparedStatements: 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="33" />

<!-- validationQuery SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定, 则查询必须是一个SQL
SELECT并且必须返回至少一行记录 -->
<property name="validationQuery" value="SELECT 1 FROM DUAL" />
<!-- testOnBorrow 默认 true 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个. 注意:
设置为true后如果要生效,validationQuery参数必须设置为非空字符串.这里建议配置为TRUE,防止取到的连接不可用 -->
<property name="testOnBorrow" value="true" />
<!-- testOnReturn false 指明是否在归还到池中前进行检验 -->
<property name="testOnReturn" value="true" />
<!-- testWhileIdle false 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除. 建议配置为true,
不影响性能,并且保证安全性。 建议配置为true,不影响性能,并且保证安全性。 申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,
执行validationQuery检测连接是否有效。 -->
<property name="testWhileIdle" value="true" />

<!-- 打开后,增强timeBetweenEvictionRunsMillis的周期性连接检查,minIdle内的空闲连接,每次检查强制验证连接有效性.
参考:https://github.com/alibaba/druid/wiki/KeepAlive_cn -->
<property name="keepAlive" value="true" />

<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒value="30000" -->
<property name="timeBetweenEvictionRunsMillis" value="300000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 :Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于 minEvictableIdleTimeMillis,则关闭当前连接。 -->
<property name="minEvictableIdleTimeMillis" value="60000" />
<!-- 打开removeAbandoned功能 -->
<!-- 连接泄露检查,打开removeAbandoned功能 , 连接从连接池借出后,长时间不归还,将触发强制回连接。回收周期随timeBetweenEvictionRunsMillis进行,如果连接为从连接池借出状态,并且未执行任何sql,并且从借出时间起已超过removeAbandonedTimeout时间,则强制归还连接到连接池中。 -->
<property name="removeAbandoned" value="true" />
<!-- 600秒,也就是10分钟,必须做完业务,否则可能会被关闭连接,目的是防止别人忘记关闭! -->
<!-- 通过datasource.getConnontion() 取得的连接必须在removeAbandonedTimeout这么多秒内调用close(),要不我就弄死你.(就是conn不能超过指定的租期)
单位是秒 -->
<property name="removeAbandonedTimeout" value="600" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true" />
<!-- 监控数据库 -->
<!-- <property name="filters" value="stat" /> -->
<property name="filters" value="mergeStat" />
</bean>

在tomcat关闭的时候,提示:
严重: The web application [/Dzxd] appears to have started a thread named [OracleTimeoutPollingThread] but has failed to stop it. This is very likely to create a memory leak.


...全文
1104 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧