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的配置
谁能帮分析一下原因。

解决方案 »

  1.   

    <?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: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>
      

  2.   

    很显然数据库的链接都被你用光了
    两种情况去解决
    一、连接池的链接开大一点,一般30个足够用了(数据库的链接很宝贵的,能控制在20以下最好)
    二、一定检查所有获取数据库JDBC链接的地方要关闭,你要是不关闭的话1000个链接也不够你用的。
      

  3.   

    我用的是Session来申请的数据连接。我每次用过都关了啊
      

  4.   

    问题解决了,是由于大量的产生sessionFactory的原因 。。导致数据库连接耗尽。还有就是对于调大数据库连接有时并不是解决办法。找到根源所在才是最要的。
      

  5.   

    spring不是可以关这些session和sessionFactory吗?