当前位置: 代码迷 >> J2EE >> 请教ibatis怎么释放数据库连接?(急)
  详细解决方案

请教ibatis怎么释放数据库连接?(急)

热度:386   发布时间:2016-04-22 03:24:43.0
请问ibatis如何释放数据库连接?(急,在线等)
我的项目是ibatis+struts2+mysql4,web容器是resin,操作系统是linux,我用ibatis作为持久层,ibatis配置了SIMPLE的连接池,每次访问应用,都产生很多数据库连接,访问10几次之后,在mysql中用show proccesslist看,连接数超过500以上,有时候是700以上,状态都为sleep,而且如果不重启resin,这个连接数都会一直上升,我的问题是:
1、平时mysql的连接数上了500都会挂掉,但现在即使到了900也没问题,请问这个是为什么呢?
2、这种情况是ibatis没有释放数据库连接吗?
3、ibatis的手册没有提到要主动回收连接,好像sqlmap也没有close之类的方法,我如何能释放数据库连接呢?
4、我的ibatis的连接代码是这样的
  Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
  SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
  reader.close();
  然后就用sqlMapper.queryForList()这样来获取数据的,请问这样有问题吗?还需要什么代码来释放数据库连接呢?
本人是初次用ibatis的,望各位多多指教!比较急,在线等!

------解决方案--------------------
我的是这样的:
Java code
try {         Connection con = dataSourse.getConnection();           MappedStatement stmt = sqlMap.getMappedStatement("sql");           stmt.executeUpdate(con,param);}  finally [ try { con.close();  // 关闭   }catch(SQLException e){       something; }}
------解决方案--------------------
1、平时mysql的连接数上了500都会挂掉,但现在即使到了900也没问题,请问这个是为什么呢?
mysql的sleep状态是等待连接的,mysql可以设定连接等待时间,如果超时的话sleep就关闭
2、这种情况是ibatis没有释放数据库连接吗?
ibatis会自动释放连接的
3、ibatis的手册没有提到要主动回收连接,好像sqlmap也没有close之类的方法,我如何能释放数据库连接呢?
4、我的ibatis的连接代码是这样的
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
然后就用sqlMapper.queryForList()这样来获取数据的,请问这样有问题吗?还需要什么代码来释放数据库连接呢?
ibatis在进行事务处理时,当执行commitTransaction()或rollbackTransaction()的时候连接会关闭
另外如果不进行显示事务调用的话,连接也是自动关闭的
------解决方案--------------------
ibatis会自动释放连接的。。

其实LZ可以不用这样连的。
  相关解决方案