dpring的配置文件
<!-- 装载属性配置文件 -->
<bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:jdbc.properties" />
</bean>

<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="20" />  
<property name="initialSize" value="5" />  
<property name="maxWait" value="60000" />  
<property name="maxIdle" value="20" />  
<property name="minIdle" value="3" />  
<property name="removeAbandoned" value="true" />  
<property name="removeAbandonedTimeout" value="180" />  
</bean>

<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.cache.use_query_cache">true</prop>  
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
</props>
</property>
</bean>

<!-- 配置事务管理器-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="dataSource" ref="dataSource"/>
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<!-- 配置事务传播属性-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>

<!-- 绑定事务边界-->
<aop:config>
<aop:pointcut id="allMethod" expression="execution(* com.test.service.impl.*.*(..))"/>
<aop:advisor pointcut-ref="allMethod" advice-ref="txAdvice"/>
</aop:config>

<bean id="daoTemplate" abstract="true">
<!-- 为DAO注入sessionFactory -->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean> <bean id="userDao" class="com.test.hibernate.dao.impl.UserDaoImpl" parent="daoTemplate" />


<bean id="userManager" class="com.test.service.impl.UserManagerImpl">
<property name="userDao">
<ref bean="userDao" />
</property>
</bean>
dao里的查询方法
public PageModel queryAll(int offset,int pagesize) {
String queryCountHql = "select count(*) from User";
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
Query query = session.createQuery(queryCountHql);
int totalCount = ((Long)query.uniqueResult()).intValue();
List<?> datas = session.createQuery("from User")
.setFirstResult(offset)
.setMaxResults(pagesize)
.list();
PageModel pm = new PageModel();
int totalPage = 0;
if(totalCount%pagesize ==0)
totalPage = totalCount/pagesize;
else
totalPage = totalCount/pagesize + 1;
pm.setTotalCount(totalCount);
pm.setTotalPage(totalPage);
pm.setDatas(datas);
return pm;
}
现在的问题是每次请求一次action 查询的时候,后台都初始化一次连接池。刷新两三次,MYSQL连接全部用光.
到底是怎么回事啊?
spring 哪有问题

解决方案 »

  1.   

    C3P0比DBCP好用,DBCP的bug较多 
      

  2.   

    应该是session声明周期问题.
    有点奇怪,为什么楼主不用 HibernateTemplate 呢?用HibernateTemplate, 分页查询实现new HibernateCallback()session由Spring自己管理,就不会出现这个问题了
      

  3.   

    LZ
      你openSession看看  还有就是session要close。。
      

  4.   

      你每次都是 getCurrentsession  可能有问题
      

  5.   

    根本就不是session没关闭
    我换种写法还是不行Session session = getHibernateTemplate().getSessionFactory().openSession();
    Query query = session.createQuery(queryCountHql);
    int totalCount = ((Long)query.uniqueResult()).intValue();
    List<?> datas = session.createQuery("from User")
    .setFirstResult(offset)
    .setMaxResults(pagesize)
    .list();
    PageModel pm = new PageModel();
    int totalPage = 0;
    if(totalCount%pagesize ==0)
    totalPage = totalCount/pagesize;
    else
    totalPage = totalCount/pagesize + 1;
    pm.setTotalCount(totalCount);
    pm.setTotalPage(totalPage);
    pm.setDatas(datas);
    session.close();
    return pm;
    这回session关了吧
    还是不行
      

  6.   

    核查一下 dbcp.jar  是否是1.0?1.0的dbcp.jar有这个BUG。
    如果是这样,下载 1.2 的 dbcp.jar和common-pool.jar
      

  7.   

    用HibernateDaoSuport、事务交给spring管理