我在Oracle DB上做一些数据验证。有10种不同类型的验证我必须做。每组验证包含数百个测试用例。为了保存时间,我在10个不同的线程上并行运行验证。每个线程打开一个数据库连接,执行测试用例,然后关闭连接--并对下一个测试用例执行相同的操作。问题是我最多可以有8个并发的oracle会话。目前不可能增加会议次数。为了处理这个场景,我使用Semaphore
将并发oracle会话的数量限制为8
public class DatabaseConnection{
Semaphore counter = new Semaphore(8);
public Connection createConnection(){
...
...
counter.acquire();
Connection connection = DriverManager.getConnection(....
...
}
public closeConnection(Connection con){
...
con.close();
counter.release();
}
}
即使我在执行每个测试后正确地关闭连接,我也会得到maximum number of sessions exceeded
异常。我怀疑即使我关闭了连接,它也没有在服务器端正确关闭。这有什么解决办法?
1条答案
按热度按时间rpppsulh1#
我在10个不同的线程上并行运行验证。
我想知道你是怎么进行平行测试的?有没有可能最终得到
DatabaseConnection
类的10个示例?如果是,那么你也会得到10个信号量,每个信号量计数8次。在这种情况下,最大连接数将为80…您可以避免将信号量声明为静态。