zoukankan      html  css  js  c++  java
  • 使用proxool的异常

    proxool配置如下:

    proxool.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <something-else-entirely>
        <proxool>
            <alias>dbname</alias> <!--数据源的别名-->  
            <driver-url>jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&amp;characterEncoding=utf8</driver-url><!--url连接-->
            <driver-class>com.mysql.jdbc.Driver</driver-class> <!--驱动类-->
            <driver-properties>
                <property name="user" value="root" /> <!--用户名-->
                <property name="password" value="root" /><!--密码-->
            </driver-properties> 
        <!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->  
            <maximum-connection-count>100</maximum-connection-count> 
           <!--最小连接数(默认2个)--> 
            <minimum-connection-count>10</minimum-connection-count> 
           <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒-->  
            <house-keeping-sleep-time>90000</house-keeping-sleep-time>
        <!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--> 
            <maximum-new-connections>10</maximum-new-connections> 
          <!--最少保持的空闲连接数(默认2个)-->  
            <prototype-count>5</prototype-count> 
        </proxool>
    </something-else-entirely> 
    hibernate-context.xml
    <beans>
    ....添加
    <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" >
            <property name="alias">
                <value>dbname</value>
            </property>
            <property name="driver">
                <value>com.mysql.jdbc.Driver</value>
            </property>
            <property name="driverUrl">
                <value>jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&amp;characterEncoding=utf8</value>
            </property>
            <property name="user">
                <value>root</value>
            </property>
            <property name="password">
                <value>root</value>
            </property>
            <property name="minimumConnectionCount">
                <value>10</value>
            </property>
            <property name="maximumConnectionCount">
                <value>100</value>
            </property>
            <property name="prototypeCount">
                <value>5</value>
            </property>
        </bean>   
    ....
    </beans>
    web.xml
    <web-app>
    ....添加
    <servlet>
            <servlet-name>ServletConfigurator</servlet-name>
            <servlet-class>
                org.logicalcobwebs.proxool.configuration.ServletConfigurator
            </servlet-class>
            <init-param>
                <param-name>xmlFile</param-name>
                <param-value>WEB-INF/proxool.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet>
            <servlet-name>Admin</servlet-name>
            <servlet-class>
                org.logicalcobwebs.proxool.admin.servlet.AdminServlet
            </servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Admin</servlet-name>
            <url-pattern>/admin</url-pattern>
        </servlet-mapping>
        <!-- 配置受保护域,只有Tomcat管理员才能察看连接池的信息 -->
        <security-constraint>
            <web-resource-collection>
                <web-resource-name>proxool</web-resource-name>
                <url-pattern>/admin</url-pattern>
            </web-resource-collection>
            <auth-constraint>
                <role-name>manager</role-name>
            </auth-constraint>
        </security-constraint>
        <login-config>
            <auth-method>BASIC</auth-method>
            <realm-name>proxool manager Application</realm-name>
        </login-config>
        <security-role>
            <description>
                The role that is required to log in to the Manager Application
            </description>
            <role-name>manager</role-name>
        </security-role>
    ....
    </web-app>

    添加jar包
    proxool-0.9.1.jar
    proxool-cglib.jar

    出现异常,异常信息如下所示:

    exception1
    2012-10-12 15:23:58 ERROR interceptor.TransactionInterceptor (TransactionAspectSupport.java:287) - Application exception overridden by rollback exception
    org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select contentflo0_.id as id17_, contentflo0_.contentid as contentid17_, contentflo0_.flowtaskid as flowtaskid17_ from contentflowtask contentflo0_, content content1_ where contentflo0_.contentid=content1_.id and contentflo0_.contentid=1830 and content1_.isdelete=0 order by contentflo0_.id desc]; SQL state [08003]; error code [0]; No operations allowed after connection closed.
    
    Connection was closed explicitly by the application at the following location:
    
    ** BEGIN NESTED EXCEPTION ** 
    
    java.lang.Throwable
    
    STACKTRACE:
    
    java.lang.Throwable
        at com.mysql.jdbc.Connection.close(Connection.java:1123)
        at org.logicalcobwebs.proxool.AbstractProxyConnection.reallyClose(AbstractProxyConnection.java:173)
        at org.logicalcobwebs.proxool.ConnectionPool.removeProxyConnection(ConnectionPool.java:413)
        at org.logicalcobwebs.proxool.HouseKeeper.sweep(HouseKeeper.java:139)
        at org.logicalcobwebs.proxool.HouseKeeperThread.run(HouseKeeperThread.java:39)
    
    
    ** END NESTED EXCEPTION **
    
    ; nested exception is java.sql.SQLException: No operations allowed after connection closed.
    
    Connection was closed explicitly by the application at the following location:
    
    ** BEGIN NESTED EXCEPTION ** 
    
    java.lang.Throwable
    
    STACKTRACE:
    
    java.lang.Throwable
        at com.mysql.jdbc.Connection.close(Connection.java:1123)
        at org.logicalcobwebs.proxool.AbstractProxyConnection.reallyClose(AbstractProxyConnection.java:173)
        at org.logicalcobwebs.proxool.ConnectionPool.removeProxyConnection(ConnectionPool.java:413)
        at org.logicalcobwebs.proxool.HouseKeeper.sweep(HouseKeeper.java:139)
        at org.logicalcobwebs.proxool.HouseKeeperThread.run(HouseKeeperThread.java:39)
    
    
    ** END NESTED EXCEPTION **
    
    
    java.sql.SQLException: No operations allowed after connection closed.
    
    Connection was closed explicitly by the application at the following location:
    
    ** BEGIN NESTED EXCEPTION ** 
    
    java.lang.Throwable
    
    STACKTRACE:
    
    java.lang.Throwable
        at com.mysql.jdbc.Connection.close(Connection.java:1123)
        at org.logicalcobwebs.proxool.AbstractProxyConnection.reallyClose(AbstractProxyConnection.java:173)
        at org.logicalcobwebs.proxool.ConnectionPool.removeProxyConnection(ConnectionPool.java:413)
        at org.logicalcobwebs.proxool.HouseKeeper.sweep(HouseKeeper.java:139)
        at org.logicalcobwebs.proxool.HouseKeeperThread.run(HouseKeeperThread.java:39)
    
    
    ** END NESTED EXCEPTION **
    
    
        at com.mysql.jdbc.Connection.checkClosed(Connection.java:2474)
        at com.mysql.jdbc.Connection.prepareStatement(Connection.java:1370)
        at com.mysql.jdbc.Connection.prepareStatement(Connection.java:1350)
        at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.logicalcobwebs.proxool.ProxyConnection.invoke(ProxyConnection.java:68)
        at org.logicalcobwebs.cglib.proxy.Proxy$ProxyImpl$$EnhancerByCGLIB$$edd30696.prepareStatement(<generated>)
        at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497)
        at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:415)
        at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
        at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
        at org.hibernate.loader.Loader.doQuery(Loader.java:661)
        at or.....
    exception2
    2012-10-12 16:16:19 ERROR transaction.JDBCTransaction (JDBCTransaction.java:67) - JDBC begin failed
    java.sql.SQLException: Couldn't perform the operation getAutoCommit: You can't perform any operations on this connection. 
    It has been automatically closed by Proxool for some reason (see logs).
        at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection.java:207)
        at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnection.java:87)
        at $java.sql.Connection$$EnhancerByProxool$$3f2ab9d8.getAutoCommit(<generated>)
        at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
        at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1319)
        ......

    出现异常结果都表明使用proxool连接时出现连接超时,具体原因如下:
    <maximum-active-time>一个活动连接最大活动时间默认5分钟,如果超过这个时间则proxool连接会自动断开。

    即在proxool.xml中修改:

    proxool.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <something-else-entirely>
        <proxool>
            <alias>dbname</alias> 
            <driver-url>jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&amp;characterEncoding=utf8</driver-url>
            <driver-class>com.mysql.jdbc.Driver</driver-class> 
            <driver-properties>
                <property name="user" value="root" /> 
                <property name="password" value="root" />
            </driver-properties> 
        <!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->  
            <maximum-connection-count>100</maximum-connection-count> 
           <!--最小连接数(默认2个)--> 
            <minimum-connection-count>10</minimum-connection-count> 
        <!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--> 
            <maximum-new-connections>10</maximum-new-connections> 
          <!--最少保持的空闲连接数(默认2个)-->  
            <prototype-count>5</prototype-count>
        <!--一个活动连接最大活动时间默认5分钟-->
            <maximum-active-time>3600000</maximum-active-time>
        <!--自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁-->
                <house-keeping-sleep-time>60000</house-keeping-sleep-time>  
        <!--Test SQL(SELECT getDate()) -->
                <house-keeping-test-sql>select sysdate() </house-keeping-test-sql>
        </proxool>
    </something-else-entirely> 
  • 相关阅读:
    【分享】Audio工程测试1080p yuv422 10bit编码,软件报告VCU能力不足
    VLC和Gstreamer配合
    【分享】在MPSoC ZCU106单板上运行Docker
    python之(25)中级总结(3)关系型数据库(mysql和oracle使用)
    python之(24)中级总结(2) 时间模块,json和xml模块学习总结
    Java从入门到实战之(33)Java中23种设计模式之5种创建式模式
    python之(23)中级总结(1) 正则表达式和内置函数学习总结
    python之(22)基础总结(5)
    SparkSQL构建用户画像
    Python机器学习(九十八)机器学习算法原理解析
  • 原文地址:https://www.cnblogs.com/sfeng1825/p/2726116.html
Copyright © 2011-2022 走看看