亲爱的所有人, 我正在 tomcat7上使用hibernate-mysql 测试 Struts WebApp。
在8小时的超时时间后,我的webApp始终 崩溃 。我在这里和那里更改了配置。但是没有成功。
非常感谢您的关注…
这里来自 hibernate.xml
``
property name="hibernate.bytecode.use_reflection_optimizer">false property name="hibernate.c3p0.idle_test_period">30 property name="hibernate.c3p0.max_size">600 property name="hibernate.c3p0.max_statements">50 property name="hibernate.c3p0.min_size">5 property name="hibernate.c3p0.timeout">1800 property name="hibernate.c3p0.testConnectionOnCheckout">true property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider property name="hibernate.c3p0.validate">true property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver property name="hibernate.connection.url">jdbc:mysql://localhost:3306/stockdb?autoReconnect=true
以下是我的堆栈跟踪中的一些行:
com.mchange.v2.c3p0.impl.NewPooledConnection handleThrowable WARNING: [c3p0] A PooledConnection that has already signalled a Connection error is still in use! ... WARNING: [c3p0] Another error has occurred [ com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed. ] which will not be reported to listeners! ... com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed. ... at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1014) ... at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.getMaxRows(NewProxyPreparedStatement.java:1200) at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:212) ... at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) ...
请帮忙!
Tomcat具有开箱即用的数据库连接池。要配置MySQL,例如:
<Context> <!-- maxActive: Maximum number of database connections in pool. Make sure you configure your mysqld max_connections large enough to handle all of your db connections. Set to -1 for no limit. --> <!-- maxIdle: Maximum number of idle database connections to retain in pool. Set to -1 for no limit. See also the DBCP documentation on this and the minEvictableIdleTimeMillis configuration parameter. --> <!-- maxWait: Maximum time to wait for a database connection to become available in ms, in this example 10 seconds. An Exception is thrown if this timeout is exceeded. Set to -1 to wait indefinitely. --> <!-- username and password: MySQL username and password for database connections --> <!-- driverClassName: Class name for the old mm.mysql JDBC driver is org.gjt.mm.mysql.Driver - we recommend using Connector/J though. Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver. --> <!-- url: The JDBC connection url for connecting to your MySQL database. --> <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest"/> </Context>
然后,您需要按以下方式配置连接:
public static void main(String[] args) throws Exception { PoolProperties p = new PoolProperties(); p.setUrl("jdbc:mysql://localhost:3306/mysql"); p.setDriverClassName("com.mysql.jdbc.Driver"); p.setUsername("root"); p.setPassword("password"); p.setJmxEnabled(true); p.setTestWhileIdle(false); p.setTestOnBorrow(true); p.setValidationQuery("SELECT 1"); p.setTestOnReturn(false); p.setValidationInterval(30000); p.setTimeBetweenEvictionRunsMillis(30000); p.setMaxActive(100); p.setInitialSize(10); p.setMaxWait(10000); p.setRemoveAbandonedTimeout(60); p.setMinEvictableIdleTimeMillis(30000); p.setMinIdle(10); p.setLogAbandoned(true); p.setRemoveAbandoned(true); p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"); DataSource datasource = new DataSource(); datasource.setPoolProperties(p); Connection con = null; con = datasource.getConnection();
现在,按照通常的方式处理JDBC代码。