JAVA处理大量JDBC池连接

时间:2016-02-25 14:26:27

标签: java sql jdbc gosu

在JAVA中创建批处理时遇到问题,我可能每秒都要调用一个特定的连接来处理一个行块,达到池大小的限制。

如何在不增加池大小的情况下处理大量连接?

using (var connection = ExternalDBConnectionManager.getConnection()){
        using (var prepStatement = connection.prepareStatement(queryToExecute)){
        ...
    }
}

每100行或更多行调用此函数,但是例如我想每行运行一次(即500行,每次调用一次) - (这意味着用相同的函数调用此函数500次)连接)

3 个答案:

答案 0 :(得分:0)

您应该阅读连接池以了解它们的工作原理。这里有数以百计的关于SO的主题。快速谷歌搜索"了解Java连接池"提供了一个库如何工作的小描述:How Connection Pooling Works

有关此SO主题的更多信息:How to establish a connection pool

基本上,您的客户端请求进入,您从池中获取连接,执行SQL操作,并在关闭连接时将其返回池中。这是高水平。

如果要将其与批处理相结合,则会变得有点棘手,因为您将获取数据,将其插入批处理中,然后在批处理中有一些预定数量的数据时触发发送/提交。

这实际上取决于您希望客户看到什么,他们在提交记录时是否需要确认?

使用池,您不太可能需要使用批处理,只需调整环境的连接池大小即可。

有许多独立的池库(C3PO和DBCP),并且许多各种服务(如websphere)已经内置了池。我相信Oracle jdbc驱动程序能够为你做到这一点。

答案 1 :(得分:0)

Universal Connection Pool (UCP)是一个Java连接池,具有丰富的功能,并与Oracle RAC,Oracle DG,Oracle ADG数据库架构紧密集成,充分利用了高可用性,故障转移和性能特性。

它是一个独立的ucp.jar,需要与JDBC驱动程序一起使用 关于UCP及其在OTN上的功能,有一些白皮书。

答案 2 :(得分:0)

你提到"批次"。通常批处理不使用为OLTP应用程序保留的连接池。这是因为如果连接被相当快地借用和释放,连接池就可以正常工作。批次通常会创建自己的连接,这些连接在批处理的生命周期内(可能是几小时)保持打开状态。