独立Java多线程应用程序的Db连接池是否有意义?

时间:2016-03-21 05:33:37

标签: java jdbc database-connection

我遇到过这些问题 - choose a db connection poolIs DB connection pooling all that importantjava - DataSource for standalone application - no application server

那些不能回答我的好奇心。

我所拥有的是一个独立的多线程Java应用程序,它应该在关闭或低负载窗口中对DB执行数据加载,但必须足够快以在有限的时间内完成。

Java线程数是可配置的,但仅限于最大数量。

就数据库连接而言,我正在为每个线程获取一个新连接,并在该线程完成时将其关闭。我没有使用第三方数据库连接池的原因是,

  

1.最大Java线程数限制为固定限制,该限制可由DB(其DB2数据库)管理

     

2.避免不必要的等待来自数据库池的连接,避免多个线程之间发生冲突或等待(如果池中没有连接)   是免费的)

所以在我的场景中,是否真的需要数据库连接池,或者从长远来看我是否会面临任何挑战,或者只是一个很好的功能?

连接池在Web应用程序的情况下是有意义的,因为您事先不知道请求/线程的数量,但我不确定具有固定最大线程的独立应用程序的任何优势。

如果需要,我正在考虑使用C3P0连接池。

2 个答案:

答案 0 :(得分:2)

使用连接池比不使用连接池有一些优势;

  1. 在线程启动时,如果连接可用在池中,则线程将不会阻止在启动时打开新连接。
  2. 当一个线程完成时,可以将连接返回到池中,这可以减少客户端连接持续存在时的数据库服务器负载(通过应用程序执行);而不是多次设置和拆除
  3. 只需限制池中的最大连接数以匹配您提到的数据库限制,并确保将连接返回到池中(使用c3p0我相信您close Connection已包装他们的PooledConnection)。

答案 1 :(得分:1)

通常,连接池会减少建立与数据库的连接的时间,因为它会重用连接,即不是打开和关闭连接,而是打开多个连接并管理这些连接(例如,在特定连接后关闭连接)时间量,总是有一个连接池,...)。

那就是说,我不确定你的应用程序会从连接池中受益(也许你想对它进行基准测试)。如果您的独立应用程序具有固定数量的线程,则应用程序的性能可能会受益于连接池,例如,如果可以重新使用连接。这意味着,如果您的应用程序在开始时启动所有线程并完成每个计算并关闭连接,则连接池可能无济于事。但是如果线程随机启动和关闭可能会有所帮助。

关于要使用的连接池实现,我个人使用了C3P0和HikariCP(https://brettwooldridge.github.io/HikariCP/)。我强烈推荐后者 - 但这只是个人意见。