SSH如何释放数据库连接(百分送上)

zjwilove4 2010-02-01 11:30:02
SSH项目中当访问到一定程度后发生open connection停住问题

使用了过滤器

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactory</param-name>
<param-value>sessionFactory</param-value>
</init-param>
</filter>

Dao中使用了如下代码:

/**
* 用户信息分页查询
* @param pageNumber 页码
* @param pageItem 数据量
* @return 查询结果
*/
public List<StUser> paginateShow(final int pageNumber,final int pageItem){
return (List)getHibernateTemplate().execute(
new HibernateCallback(){
public Object doInHibernate(Session arg0) throws HibernateException, SQLException {
hql = "from StUser";//hql
Query query = getSession().createQuery(hql);//获取query对象
query.setFirstResult((pageNumber-1)*pageItem);//开始位置
query.setMaxResults(pageItem);//返回结果数
return query.list();//获得结果
}
}
);
}

求解答!!!
百分送上
...全文
825 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
molecule520 2010-12-31
  • 打赏
  • 举报
回复
楼主的数据库如果是Mysql,应该可以替换org.springframework.jdbc.datasource.DriverManagerDataSource
连接池
NOKIA5320XM 2010-02-03
  • 打赏
  • 举报
回复
把事务交给SPRING不就好了吗?
zjwilove4 2010-02-03
  • 打赏
  • 举报
回复
这个dbcp连接池不稳定???还是我的程序有问题。。。

异常信息是:IOException 连接重置
cqznz0 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zjwilove4 的回复:]
这个dbcp连接池不稳定???还是我的程序有问题。。。

异常信息是:IOException 连接重置
[/Quote]

这个dbcp 可能是没有关session的

你换了适一下不主晓得了,反正我是这样解决了的
Landor2004 2010-02-03
  • 打赏
  • 举报
回复
在spring中不用手工写session.close()

既然有Session arg0,就不要用getSession()
gcw633 2010-02-03
  • 打赏
  • 举报
回复
我不知道在哪里配置,用了最笨的方法
if(session!=null){
session.close();
}
ssssss 2010-02-03
  • 打赏
  • 举报
回复
1.配置OpenSessionInView
2.配spring的声明式事务管理
3.lazy=true
4.load加载(不必须如此,如果不使用二级缓存的话)
Landor2004 2010-02-03
  • 打赏
  • 举报
回复
如果是jdbc默认release_mode为after_transaction
如果是jta默认release_mode为after_statement
yanyoujin 2010-02-03
  • 打赏
  • 举报
回复
在sessionFactory的类里面不是有释放的方法么? 调用啊
dickli1986 2010-02-03
  • 打赏
  • 举报
回复
我也遇到过这种问题,我的解决方法是在hibernate配置文件中,设置sessionFactory的属性
hibernate.connection.release_mode为after_transaction,当事务提交或回滚的时候,释放连接,
这个就跟方言一样配置在hibernate配置文件中,楼主试试看吧
zjwilove4 2010-02-02
  • 打赏
  • 举报
回复
此贴不可沉
  • 打赏
  • 举报
回复
帮顶,此帖不可沉!
nevernam 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zjwilove4 的回复:]
还是不行啊
我想要达到的目的是:
1.hibernate延迟加载(因为数据量很大)
2.在Dao使用query对象进行查询(因为我要使用hibernate分页...但是HibernateDaoSupport中没有...)
遇到的问题:
1.程序运行一段时间后log4j显示open conntion然后程序就停住了
[/Quote]

延迟加载就是set标记里的lazy属上面费发生地方
我以前也遇到过,后来用了opensessionInview就解决了

楼上已经有人给出了代码
zjwilove4 2010-02-02
  • 打赏
  • 举报
回复
还是不行啊
我想要达到的目的是:
1.hibernate延迟加载(因为数据量很大)
2.在Dao使用query对象进行查询(因为我要使用hibernate分页...但是HibernateDaoSupport中没有...)
遇到的问题:
1.程序运行一段时间后log4j显示open conntion然后程序就停住了
viper211 2010-02-02
  • 打赏
  • 举报
回复
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<!-- singleSession默认为true,若设为false则等于没用OpenSessionInView -->
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
zjwilove4 2010-02-02
  • 打赏
  • 举报
回复
我主要是想使用HIbernate的延迟加载机制
所有无法在Dao中释放session

我想问一下应该怎么配置才可以自动释放session呢
因为程序运行到一段时间后就会发生open session卡主不动的情况了
以下的配置文件:
<bean id="DataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@192.168.1.100:1521:XXX"></property>
<property name="username" value="XXX"></property>
<property name="password" value="XXX"></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.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>rhdbase/com/entity/StRegion.hbm.xml</value>
<value>rhdbase/com/entity/StRolemenu.hbm.xml</value>
<value>rhdbase/com/entity/StRoles.hbm.xml</value>
<value>rhdbase/com/entity/StActions.hbm.xml</value>
<value>rhdbase/com/entity/StRolepower.hbm.xml</value>
<value>rhdbase/com/entity/StUseroprinfo.hbm.xml</value>
<value>rhdbase/com/entity/StRoleregion.hbm.xml</value>
<value>rhdbase/com/entity/StMenu.hbm.xml</value>
<value>rhdbase/com/entity/StUser.hbm.xml</value>
<value>rhdbase/com/entity/StPowers.hbm.xml</value>
<value>rhdbase/com/entity/StUserrole.hbm.xml</value>
</list>
</property></bean>
<bean id="StRegionDAO" class="rhdbase.com.dao.StRegionDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StRolemenuDAO" class="rhdbase.com.dao.StRolemenuDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StRolesDAO" class="rhdbase.com.dao.StRolesDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StActionsDAO" class="rhdbase.com.dao.StActionsDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StRolepowerDAO" class="rhdbase.com.dao.StRolepowerDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StUseroprinfoDAO" class="rhdbase.com.dao.StUseroprinfoDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StRoleregionDAO" class="rhdbase.com.dao.StRoleregionDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StMenuDAO" class="rhdbase.com.dao.StMenuDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StUserDAO" class="rhdbase.com.dao.StUserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StPowersDAO" class="rhdbase.com.dao.StPowersDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="StUserroleDAO" class="rhdbase.com.dao.StUserroleDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="UserBiz" class="rhdbase.com.biz.UserBiz">
<property name="userDao" ref="StUserDAO"/>
<property name="menuDao" ref="StMenuDAO"/>
</bean>
<bean name="/userAction" class="rhdbase.com.web.action.UserAction">
<property name="userBiz" ref="UserBiz"/>
</bean>
xietingyan 2010-02-02
  • 打赏
  • 举报
回复
那个daosupport 有个 realeaseSession的方法 用这个。给分吧楼主
BearKin 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 crazylaa 的回复:]
getSession()
-》
arg0
???
不懂,这里应该是新开了一个连接,但并没有closeSession?
[/Quote]

LZ应该把调用通过显示参数传进来的那个Session吧.. 为什么要重新开一个Session呢?
Spring代理创建Session 并不需要用户去管理Session了 他自己会释放的(当你执行完一个操作的时候 AOP会帮助你释放的)
道光2008 2010-02-02
  • 打赏
  • 举报
回复
OpenSessionInViewFilter的目的是使session在使用页面响应对象延迟加载的时候,一直保存session的开放。
其实只要配置了spring的事物管理机制,session的开关,可以不需要程序来控制的
dinghun8leech 2010-02-02
  • 打赏
  • 举报
回复
ssh架构下需要关心数据库连接的开启与释放?
加载更多回复(10)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧