关于Tomcat连接数据库,连续刷洗就挂掉的问题,高手请进。
一团小毛线 2014-03-13 04:46:35 平台是Tomcat+Mysql,程序用的是spring+hibernate+struts2,数据连接池用的c3p0。
出现的症状是,只要连续刷新,用浏览器长按F5,10来秒后,不能访问连接数据库的页面了,但是静态页能访问,说明tomcat是没有挂掉的,只是连接数据库不能连接了。查了很多网上关于这方面的问题,一些说是Tomcat的最大线程数或者Tomcat最大内存太小,只有一个浏览器访问的情况下,连续F5,应该不至于导致Tomcat连接数据库有问题吧,那不是很容易就被人家黑掉?一部分人则说是连接数据库没有释放,但是用的是c3p0,应该不存在不释放的问题啊。
高手还请指点啊,谢谢。
具体的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> -->
<!-- <property name="driverClassName" value="com.mysql.jdbc.Driver"/> -->
<!-- <property name="url" value="jdbc:mysql://192.168.1.104/nhdz"/> -->
<!-- <property name="user" value="root"/> -->
<!-- <property name="password" value="mysql123"/> -->
<!-- <property name="maxPoolSize" value="30"/> -->
<!-- <property name="minPoolSize" value="1"/> -->
<!-- <property name="initialPoolSize" value="1"/> -->
<!-- <property name="maxIdleTime" value="20"/> -->
<!-- </bean> -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:mysql://61.145.120.110/nz</value>
<!-- jdbc:mysql://localhost:3306/DBName?useUnicode=true&characterEncoding=GBK -->
</property>
<property name="preferredTestQuery" value="select 1" />
<property name="testConnectionOnCheckin" value="true" />
<!--MySQL数据库的用户名 -->
<property name="user">
<value>root</value>
</property>
<!--MySQL数据库 密码 -->
<property name="password">
<value>888</value>
</property>
<!--连接池中保留的最小连接数。-->
<property name="minPoolSize">
<value>5</value>
</property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize">
<value>100</value>
</property>
<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize">
<value>10</value>
</property>
<!--最大空闲时间,多少秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime">
<value>90</value>
</property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">
<value>5</value>
</property>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的 statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面 的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements">
<value>0</value>
</property>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod">
<value>60</value>
</property>
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts">
<value>30</value>
</property>
<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
<property name="breakAfterAcquireFailure">
<value>true</value>
</property>
<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout">
<value>true</value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>tn/dz/domain/DZ.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.autoReconnect">true</prop>
</props>
</property>
</bean>
<import resource="classpath:actionContext.xml"/>
<import resource="classpath:daoContext.xml"/>
<!-- <bean id="DZDao" class="tn.nhdz.dao.impl.DZDaoImpl" > -->
<!-- <property name="sessionFactory"> -->
<!-- <ref bean="sessionFactory" /> -->
<!-- </property> -->
<!-- </bean> -->
</beans>