光滑/ HikariCP给予"太多连接"而不是超时

时间:2016-12-06 01:37:31

标签: mysql slick hikaricp aws-rds

我使用Slick3.1.1 + HikariCP2.5.1连接到AWS t2.medium MySql实例。 AWS文档说t2.medium可以有312个最大连接。我的配置文件是:

rdsConfig = {
  url = "jdbc:mysql://mydb.........us-west-2.rds.amazonaws.com:3306/owlschema"  

  driver = "com.mysql.jdbc.Driver"
  connectionPool = HikariCP
  maxConnections = 222         # <<<<< ie make this < 312.
  keepAliveConnection = true
  properties = {
    user = "me"
    password = "mydarksecret"
  }
  numThreads = 40    
}

当我重负时,我开始得到太多的连接&#39;错误:

    17:05:40.708 DEBUG [] [rdsConfig connection adder] com.zaxxer.hikari.pool.HikariPool - rdsConfig - Cannot acquire connection from data source
    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections
        at sun.reflect.GeneratedConstructorAccessor59.newInstance(Unknown Source) ~[na:na]
...

我对此感到困惑。从文档我认为它应该永远不会尝试获得超过我指定的222个连接,这将永远不会超过AWS限制。我期待在繁重的负载下获得超时,但是没有太多的连接和#39;错误。那么maxConnections做了什么?感谢。

1 个答案:

答案 0 :(得分:4)

修正了它。正如@Pawel Dolega上面所建议的那样,我还将minConnections = 222设为实验。在启动应用程序时,我立即开始收到too many connections错误,即使没有加载也是如此。事实证明这是我的错误:我实际上打开了多个单独的数据库实例,因为我在每个需要数据库访问的类中使用以下特征:

trait dbCore {
  val db = Database.forConfig("rdsConfig")
}

所以每个班级都使用自己独立的222个连接上限。将此特征更改为对象而不是修复了错误 - 现在所有类都使用相同的单例数据库实例,因此maxConnections上限得到了适当的尊重。