配置如下(片断): <!-- Session Factory -->
<bean id="iSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="annotatedClasses">
<list>
<value>com.brainwave.yiqiyou.model.taggable.Country</value>
</list>
</property>

<!--
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>

<prop key="hibernate.proxool.xml">proxool.xml</prop>
<prop key="hibernate.proxool.pool_alias">iConnectionPool</prop>
</props>
</property>
-->

<property name="hibernateProperties"> 
            <props> 
 <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
                 <prop key="hibernate.show_sql">true</prop>             </props> 
        </property>
<property name="dataSource"><ref local="iDataSource"/></property>

</bean>

<!-- TransactionManager -->
<bean id="iTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
<property name="sessionFactory">
<ref local="iSessionFactory"/>
</property> 
</bean>

<!-- HibernateInterceptor -->
<bean id="iHibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
<property name="sessionFactory">
<ref local="iSessionFactory" />
</property>
</bean>

<!-- 测试用数据源-->
<bean id="iDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql:yiqiyou_blank"/>
<property name="username" value="postgres"/>
<property name="password" value="3951413"/>
</bean>
<!-- 测试用数据源 -->
<!-- CountryDAO -->
<bean id="CountryDAO"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.brainwave.yiqiyou.dao.taggable.CountryDAO</value>
</property>
<property name="target">
<bean
class="com.brainwave.yiqiyou.dao.taggable.impl.hibernate.CountryDAOImpl">
<property name="sessionFactory" ref="iSessionFactory" />
</bean>
</property>
<property name="interceptorNames">
<list>
<value>iHibernateInterceptor</value>
</list>
</property>
</bean>
<!-- Country Service -->
<bean id="CountryService" parent="ServiceTemplate">
<property name="target">
<bean
class="com.brainwave.yiqiyou.service.taggable.impl.spring.CountryServiceImpl">
<property name="DAO">
<ref bean="CountryDAO" />
</property>
</bean>
</property>
</bean>
<bean id="ServiceTemplate"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="iTransactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>单元测试是从AbstractTransactionalDataSourceSpringContextTests派生的,CountryDAOTest中一共有10个方法,发现每次执行完4个以后,就停在第5个不动了。另外制作了一个查询页面,也是每次执行第5次查询时就僵死了。看任务管理器,发现每一次查询都开了一个新连接,数据库最大连接数设置是100,没到上限,僵死时数据库还可以进行别的连接查询。请问如何配置?

解决方案 »

  1.   

    是没有close,不过DAO里不需要close吧?我现在DAO是从HibernateDaoSupport派生,里面直接调用getHibernateTemplate()来处理,比如load方法:
    return (Country)getHibernateTemplate().load(Country.class, id);
      

  2.   

    DAO里是不需要!调用DAO的地方关闭没!
    你检查下!最后有没有finally
    close  con
      

  3.   

    spring/hibernate主要是一些配置,如果配置错误直接就报错了!你说的这种情况!运行几次就停那里了!我感觉是没有close con!你最好检查下程序,一个事务里用的是不是一个con而且有没有finally   close con.最好获得con的地方没获得一个打出一个数字出来!
      

  4.   

    没有可以获得连接的地方,DAO是从HibernateDAOSupport派生的,里面直接调用getHibernateTemplate().load(obj);,SessionFactory在XML中配置的。单元测试类从AbstractTransactionalDataSourceSpringContextTests派生,它的每个测试方法都是一个事务,一般也不在这里关闭连接。这个配置是从另一个项目中直接拷过来的,做了点小的修改。同事把配置文件和他的配置文件比较了一番,也没看出有什么不对劲的地方。
      

  5.   

    初步判断是hibernate3.1的问题,改用hibernate3.05就正常了