我想有个名 2017-06-24 05:05 采纳率: 0%
浏览 701

dbcp获取的connection关闭时报错

六月 24, 2017 12:50:34 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [springmvc] in context with path [/hf_1] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Pool not open] with root cause
java.lang.IllegalStateException: Pool not open
at org.apache.commons.pool.BaseObjectPool.assertOpen(BaseObjectPool.java:78)
at org.apache.commons.pool.impl.GenericObjectPool.returnObject(GenericObjectPool.java:916)
at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:87)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
at com.neuedu.attendance.dao.BaseDao.myClose(BaseDao.java:378)
at com.neuedu.attendance.dao.BaseDao.query(BaseDao.java:151)
at com.neuedu.attendance.login.controller.LoginController.login(LoginController.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1082)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:623)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

以上是异常,自己写的数据库操作,没用框架,只用了Spring

private void init(){

    AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("../config/spring/applicationContext.xml");  
    DataSource ds = (DataSource)ctx.getBean("dataSource");   


    try {

        con =ds.getConnection(); 

    } catch (SQLException e) {

        e.printStackTrace();
    }finally{
        ctx.close();


    }
}

然后是数据库操作,我做了一个查询,没有问题。但是到最后想关闭connection时候报错 的 调用 con.close();

dataresourse用的是org.apache.commons.dbcp.BasicDataSource


配置文件为

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close" > 

    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />

    <property name="maxActive" value="${dbcp.maxActive}" />  
    <property name="maxIdle" value="${dbcp.maxIdle}" />  
    <property name="defaultAutoCommit" value="${dbcp.defaultAutoCommit}" />  

    <property name="timeBetweenEvictionRunsMillis" value="3600000" />  
    <property name="minEvictableIdleTimeMillis" value="3600000" />  
</bean>



求解,,自己瞎写的哈哈
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-06 00:32
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    根据您提供的错误信息,似乎在调用con.close()时遇到了问题。这可能是由于以下原因导致的:

    1. 数据源连接未关闭:首先检查数据源是否已经关闭。
    try {
        // 关闭数据源连接
        dataSource.getConnection().close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
    1. SQL注入攻击:如果您的应用程序存在SQL注入漏洞,请确保您的应用已正确处理SQL语句,并且不会将恶意输入传递给数据库服务器。

    2. 检查连接池状态:确保您的连接池(在此情况下是BasicDataSource)的状态正常。例如,maxActivemaxIdledefaultAutoCommit属性应该设置得当。

    3. 数据库连接超时:检查是否存在连接超时的问题。在某些情况下,数据库可能无法及时响应连接请求,从而导致断开连接的情况。

    为了更准确地定位问题,您可以尝试使用一些调试工具来查看详细日志或堆栈跟踪信息。例如,可以使用jconsole工具查看数据库连接状态,或者使用JDBC Driver Manager来查看SQL执行情况。

    另外,如果您正在使用Spring Boot框架,请考虑使用@Transactional注解来自动管理事务,以避免因数据库操作引起的错误。此外,确保遵循最佳实践,如对敏感数据进行加密存储等,以防止SQL注入和其他类型的安全风险。

    评论

报告相同问题?