postgres数据源的Grails可共享vs不可共享连接池

时间:2017-07-14 12:06:51

标签: postgresql grails connection-pooling connection-pool

我的问题是我有两个应用程序都获得了这些例外:

  

引起:org.apache.tomcat.jdbc.pool.PoolExhaustedException:   [pool-2-thread-273]超时:池空。无法获取连接   在30秒内,没有可用[尺寸:100;忙碌:99;空闲:0;   lastwait:30000]

有两个应用程序:

  1. grails app war在tomcat中运行,连接到postgres数据源A
  2. 连接到数据源B的独立jar,它是与postgres数据源A在同一服务器上的不同数据库。
  3. 默认情况下,两个应用程序都使用org.apache.tomcat.jdbc.pool.ConnectionPool(因为我没有在任何地方配置默认池,两个应用都使用此功能)。此外,我的最大连接限制是200并且仅使用< 130个连接,所以我没有遇到最大连接问题。由于两个应用程序使用单独的数据源,我读到这意味着它们不能是相同的conn池。

    当我登录我的postgres服务器时,我可以看到app 2有100个空闲连接,并且池的最大空闲大小为100.所以这很好。但是,我没想到的是我的应用程序1将使用来自应用程序2池的连接 - 或者更确切地说,因为看起来应用程序共享连接池 - 我认为应用程序1正试图从此公共池中获取已经分配了100个连接。我真的没想到,因为他们使用tomcat conn池而且AppB甚至不使用tomcat,那么为什么要共享它们呢......

    所以我的问题是(因为我真的很难找到关于此的文档):

    1. 默认情况下,不同的应用会使用相同的conn池吗?
    2. 如果他们使用相同的conn池,那么如果他们使用不同的数据源,他们如何共享conn池呢?
    3. 是否可以在grails中指定共享和非共享conn池? https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html此链接专门提到了postgres,它似乎有共享vs非共享概念(虽然我无法找到有关此问题的任何好文档),但它是在grails之外配置的。有没有办法在grails中做到这一点?
    4. 注意:使用grails 2.4.5和postgres服务器90502

0 个答案:

没有答案