使用proxool连接池 ,连接没有关闭的原因
2014-02-20 16:51
387 查看
遇到的问题:
使用如下方法查询,连接不能正常关闭:
方式1: SQLQuery query=getSession().createSQLQuery(sql.toString());
如果事务配置正确的话,方式1可以.
方式2: Session session = this.getHibernateTemplate().getSessionFactory().openSession();
List<Object[]> cList= session.createSQLQuery(sql).list();
该方式不受spring事务管理,需要修改为如下方式:
Session session = this.getSession();
Query query = session.createSQLQuery(sql);
List<Object[]> cList= query.list();
这样修改后,如果事务配置正确,则session能正常关闭.
如果事务配置不正确, 为了以防万一,可以在代码中添加如下代码,关闭session: releaseSession(session);// 这是spring自己提供的方法
正确的事务配置如下:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 哪些类哪些方法使用事务 -->
<aop:config>
<aop:pointcut id="allServiceMethod"
expression="execution(* com.bbc.*.*.service.impl.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allServiceMethod" />
</aop:config>
<!-- 事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
当时由于事务配置中的包路径写错了,导致session关闭没有通过spring事务控制,造成session一直未关闭. 结果强制使用 releaseSession(session); 也到实现了session关闭.其实当事务配置正确后,就不需要 releaseSession(session); 了.
使用如下方法查询,连接不能正常关闭:
方式1: SQLQuery query=getSession().createSQLQuery(sql.toString());
如果事务配置正确的话,方式1可以.
方式2: Session session = this.getHibernateTemplate().getSessionFactory().openSession();
List<Object[]> cList= session.createSQLQuery(sql).list();
该方式不受spring事务管理,需要修改为如下方式:
Session session = this.getSession();
Query query = session.createSQLQuery(sql);
List<Object[]> cList= query.list();
这样修改后,如果事务配置正确,则session能正常关闭.
如果事务配置不正确, 为了以防万一,可以在代码中添加如下代码,关闭session: releaseSession(session);// 这是spring自己提供的方法
正确的事务配置如下:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 哪些类哪些方法使用事务 -->
<aop:config>
<aop:pointcut id="allServiceMethod"
expression="execution(* com.bbc.*.*.service.impl.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allServiceMethod" />
</aop:config>
<!-- 事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
当时由于事务配置中的包路径写错了,导致session关闭没有通过spring事务控制,造成session一直未关闭. 结果强制使用 releaseSession(session); 也到实现了session关闭.其实当事务配置正确后,就不需要 releaseSession(session); 了.
相关文章推荐
- s2sh整合使用spring管理session连接没有关闭
- 使用 proxool 连接池获取连接
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。
- 转贴: 在使用SPSite对象时容易发生内存泄漏!造成内存泄漏的原因是没有正确地关闭SPSite对象
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。
- 【转】Internet连接正常但是没有网络,禁用以太网以后再重新启动就可以使用了,原因是什么?
- 用proxool连接池关闭连接注意事项
- SQL SERVER 2005 无法使用SQL SERVER MANAGERMET STUDIO 登陆(原因是没有使用默认端口进行远程连接所造成的)
- JdbcTemplate 在使用连接池的情况下,数据库连接仍超出最大回话数可能的原因
- 使用Mybatis3.3.0获得已关闭的数据库连接?原因?
- Spring 无法释放连接的原因:没有使用事务管理!
- java 数据库常用连接池框架使用 C3P0、proxool
- 使用druid连接池的超时回收机制排查连接泄露问题
- 使用MyEclipse中用Hibernate反向工程生成的DAO会发生对象无法存储到数据库的现象,原因是没有运用事务。
- Hibernate 使用JBOSS 自带JNDI连接池连接SQL SERVER 2005的配置方法
- nodejs连接mysql之使用连接池pool
- sqlserver 2005没有1433端口|无法启动当使用tcp/ip连接时
- 由于套接 字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址
- 使用TOMCAT5.5连接池连接mysql(解决Cannot create JDBC driver of class '' for connect URL 'null')
- 在JDBC、Spring或者Hibernate中使用proxool连接池