ibatis使用时查看oracle数据库中v$process里session过多的问题

小水晶 2009-05-21 08:37:43
我的程序适用ibatis连接数据库,由于某些项目的原因,无法适用spring管理dao,因此只能自己写代码来创建dao

配置文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
<properties resource="DB.properties" />

<settings
lazyLoadingEnabled="true"
useStatementNamespaces="false"
cacheModelsEnabled="false"
enhancementEnabled="false"
/>

<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${first}"/>
<property name="JDBC.Password" value="${second}"/>
</dataSource>
</transactionManager>

<sqlMap resource="publishReport.xml"/>
</sqlMapConfig>

初始化salmap的代码如下:

public static synchronized SqlMapClient initSqlMapClient()
{
if(sqlMap == null)
{
try
{
LOGGER.info("开始初始化数据库连接");

String resource = "SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();

LOGGER.info("数据库连接初始化结束");
}
catch(Exception e)
{
LOGGER.error("数据库初始化失败:" + e.toString());
}
}

return sqlMap;
}
通过日志可以看到程序中的确只有一个sqlMap

但是在项目运行之后,发现oracle数据库中
select count(*) from v$process
值增加了很多,而且好像有数据库连接就会增加,但不是每次都增加那么多,但规律没有明确。
个人感觉似乎是我每次执行sqlMap.query或sqlMap.update等的时候就会增加session
不明白这是为什么,select count(*) from v$process值总增加,到了150时,就连接不上数据库了,虽然可以调整数据库设置,使最大值增加,但这样增加还是早晚会出问题,请问如何解决?
...全文
241 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnson_Hong 2009-05-21
  • 打赏
  • 举报
回复
做数据库操作的时候打开连接了却没有关闭
Landor2004 2009-05-21
  • 打赏
  • 举报
回复
1 sqlMap是threadlocal的,所以不需要synchronized

2 jdbc方式是用来学习的,请更换成连接池方式
小水晶 2009-05-21
  • 打赏
  • 举报
回复
如何关闭?应该用什么连接池方式,请指教

67,512

社区成员

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

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