我试图多次使用OracleDataSource连接。在类中,我将cacheProperty设置为10:
cacheProps.setProperty("MaxLimit", "10");
调用连接的类正在等待返回值,因此两个调用不会同时进行。使用该连接的类在类中的随机位置获取带有连接变量的空指针。它始终发生在第5个请求上。是否有一些我不知道的属性意味着你只能使用连接池4次?
这是出现空指针的代码片段:
int threadNo = 2;
Connection conn = OraConnODS.getConnection("env " + threadNo);
conn.setAutoCommit(false);
Statement stm = conn.createStatement();
通常在第二行,有时在第三行。
答案 0 :(得分:1)
尝试此查询以检查oracle中实际打开的连接数
SELECT
'Currently, '
|| (SELECT COUNT(*) FROM V$SESSION)
|| ' out of '
|| VP.VALUE
|| ' connections are used.' AS USAGE_MESSAGE
FROM
V$PARAMETER VP
WHERE VP.NAME = 'sessions'
并查看计数是否为> 10.如果> 10然后你需要发布你的完整代码/ xml让我们来看看。
答案 1 :(得分:0)
首先,您应该尝试使用像DBP0这样的数据库连接池,而不是直接使用数据源。通过这种方式,您可以更好地控制它。
无论如何,你的问题似乎是Connection泄漏的关系。可能存在一些陈旧的连接,阻止您创建更多连接。下一步将是检查打开多少个连接[参见satya的答案]。但接下来的问题将是删除陈旧的连接,这将是艰难的,所以我会建议数据库连接池。
编辑:好的,我可以看到您正在使用连接池,然后尝试打印总活动连接,您将能够解决根本问题。我遇到了同样的问题,因为连接泄漏和原始修复将是用暴力清除连接[通常连接池提供这样的api,至少C3P0做]。获取连接池日志,您将了解根本原因。