Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
at sun.reflect.GeneratedConstructorAccessor62.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1095)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.GeneratedConstructorAccessor21.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1247)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221)
... 88 more
Using dialect: org.hibernate.dialect.MySQLDialect
Transaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory
No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
Automatic flush during beforeCompletion(): disabled
Automatic session close at end of transaction: disabled
Scrollable result sets: disabled
JDBC3 getGeneratedKeys(): disabled
Connection release mode: auto
Maximum outer join fetch depth: 2
Default batch fetch size: 1
Generate SQL with comments: disabled
Order SQL updates by primary key: disabled
Order SQL inserts for batching: disabled
Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
Using ASTQueryTranslatorFactory
Query language substitutions: {}
JPA-QL strict compliance: disabled
Second-level cache: enabled
Query cache: disabled
Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
Optimize cache for minimal puts: disabled
Structured second-level cache entries: disabled
Echoing all SQL to stdout
Statistics: disabled
Deleted entity synthetic identifier rollback: disabled
Default entity-mode: pojo
Named query checking : enabled
building session factory
Not binding factory to JNDI, no JNDI name configured
Using DataSource [org.apache.commons.dbcp.BasicDataSource@17e9134] of Hibernate SessionFactory for HibernateTransactionManager我每次用过session后就关闭连接 了。谁能分析下原因出在那里了。
以下为applicationContext.xml的配置
谁能帮分析一下原因。
at sun.reflect.GeneratedConstructorAccessor62.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1095)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.GeneratedConstructorAccessor21.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1247)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221)
... 88 more
Using dialect: org.hibernate.dialect.MySQLDialect
Transaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory
No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
Automatic flush during beforeCompletion(): disabled
Automatic session close at end of transaction: disabled
Scrollable result sets: disabled
JDBC3 getGeneratedKeys(): disabled
Connection release mode: auto
Maximum outer join fetch depth: 2
Default batch fetch size: 1
Generate SQL with comments: disabled
Order SQL updates by primary key: disabled
Order SQL inserts for batching: disabled
Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
Using ASTQueryTranslatorFactory
Query language substitutions: {}
JPA-QL strict compliance: disabled
Second-level cache: enabled
Query cache: disabled
Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
Optimize cache for minimal puts: disabled
Structured second-level cache entries: disabled
Echoing all SQL to stdout
Statistics: disabled
Deleted entity synthetic identifier rollback: disabled
Default entity-mode: pojo
Named query checking : enabled
building session factory
Not binding factory to JNDI, no JNDI name configured
Using DataSource [org.apache.commons.dbcp.BasicDataSource@17e9134] of Hibernate SessionFactory for HibernateTransactionManager我每次用过session后就关闭连接 了。谁能分析下原因出在那里了。
以下为applicationContext.xml的配置
谁能帮分析一下原因。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="SpringLoginVerify" class="com.lichen.sms.action.LoginVerifyAction"></bean>
<bean id="SpringConfig" class="com.lichen.sms.action.ConfigAction"></bean>
<bean id="SpringMsg" class="com.lichen.sms.action.MsgAction"></bean>
<bean id="SpringTel" class="com.lichen.sms.action.TelInfoAction"></bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/msgdb">
</property>
<property name="username" value="root"></property>
<property name="password" value="admin"></property>
<property name="initialSize">
<value>20</value>
</property>
</bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/lichen/sms/bean/InBox.hbm.xml</value>
<value>com/lichen/sms/bean/InMsg.hbm.xml</value>
<value>com/lichen/sms/bean/OutMsg.hbm.xml</value>
<value>com/lichen/sms/bean/OutBox.hbm.xml</value>
<value>com/lichen/sms/bean/TelInfo.hbm.xml</value>
<value>com/lichen/sms/bean/TelTypeBean.hbm.xml</value>
<value>com/lichen/sms/bean/ReplyMsg.hbm.xml</value>
<value>com/lichen/sms/bean/UserInfo.hbm.xml</value>
</list>
</property>
</bean> <!-- 配置Hibernate的事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务拦截器bean -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<!-- 所有名字以DAO,Service结尾的bean,将由该"bean后处理器"为其创建事务代理;实际上应该在业务层进行事务管理 -->
<value>*DAO,*Service</value>
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!-- 注册InBoxDAO -->
<bean id="InBoxDAO" class="com.lichen.sms.dao.impl.InBoxDAOImpl">
<!--
sessionFactory为InBoxDAOImpl中的成员变量,且让它参照本文中上面的bean(sessionFactory)
-->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property> </bean> <!-- 注册OutBoxDAO -->
<bean id="OutBoxDAO" class="com.lichen.sms.dao.impl.OutBoxDAOImpl">
<!--
sessionFactory为InBoxDAOImpl中的成员变量,且让它参照本文中上面的bean(sessionFactory)
-->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property> </bean>
<!-- 注册InMsgDAO -->
<bean id="InMsgDAO" class="com.lichen.sms.dao.impl.InMsgDAOImpl">
<!--
sessionFactory为InBoxDAOImpl中的成员变量,且让它参照本文中上面的bean(sessionFactory)
-->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property> </bean>
<!-- 注册OutMsgDAO -->
<bean id="OutMsgDAO" class="com.lichen.sms.dao.impl.OutMsgDAOImpl">
<!--
sessionFactory为InBoxDAOImpl中的成员变量,且让它参照本文中上面的bean(sessionFactory)
-->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property> </bean>
<!-- 注册TelInfoDAO -->
<bean id="TelInfoDAO" class="com.lichen.sms.dao.impl.TelInfoDAOImpl">
<!--
sessionFactory为InBoxDAOImpl中的成员变量,且让它参照本文中上面的bean(sessionFactory)
-->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property> </bean>
<!-- 注册TelTypeDAO -->
<bean id="TelTypeDAO" class="com.lichen.sms.dao.impl.TelTypeDAOImpl">
<!--
sessionFactory为InBoxDAOImpl中的成员变量,且让它参照本文中上面的bean(sessionFactory)
-->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property> </bean>
<!-- 注册ReplyMsgDAO -->
<bean id="ReplyMsgDAO" class="com.lichen.sms.dao.impl.ReplyMsgDAOImpl">
<!--
sessionFactory为InBoxDAOImpl中的成员变量,且让它参照本文中上面的bean(sessionFactory)
-->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property> </bean>
<!-- 注册UserInfoDAO -->
<bean id="UserInfoDAO" class="com.lichen.sms.dao.impl.UserInfoDAOImpl">
<!--
sessionFactory为InBoxDAOImpl中的成员变量,且让它参照本文中上面的bean(sessionFactory)
-->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property> </bean>
</beans>
两种情况去解决
一、连接池的链接开大一点,一般30个足够用了(数据库的链接很宝贵的,能控制在20以下最好)
二、一定检查所有获取数据库JDBC链接的地方要关闭,你要是不关闭的话1000个链接也不够你用的。