首页 > 解决方案 > Play Framework Scala 2.8x 的 Hikaripool 连接超时捕获异常

问题描述

我是使用 Play Framework 进行 Scala 开发的超级新手。我正在使用 Scala 和 Play Framework 2.8x 构建一个项目,我正在尝试连接到 MYSQL 数据库。

我现在已经花了几天的时间试图找出问题所在,而在线答案对我没有帮助。

但是,我尝试关注这个线程:Steps needed to use MySQL database with Play framework 2.0

这是我的 application.conf 文件数据库设置

play.db {
  config = "db"
  default = "MyDB" 
} 

#Database config
db {
  MyDB.driver="com.mysql.jdbc.Driver"
  MyDB.url="jdbc:mysql://127.0.0.1:3306/MyDB?characterEncoding=UTF-8&autoReconnect=true&useSSL=false"
  MyDB.username="root"
  MyDB.password="password"

  MyDB.hikaricp {
    connectionTimeout = 60 seconds
    validationTimeout = 5 seconds
    maxLifetime = 60 minutes
  }
}

# db connections = ((physical_core_count * 2) + effective_spindle_count)
fixedConnectionPool = 9
database.dispatcher {
  executor = "thread-pool-executor"
  throughput = 1
  thread-pool-executor {
    fixed-pool-size = ${fixedConnectionPool}
  }
}

这是我的模型代码:

class MyDatabase @Inject() (@NamedDatabase("MyDB") db: Database, databaseExecutionContext: DatabaseExecutionContext) {

  def read(query: String) = {
    Future {
      // get jdbc connection
      try {
        val connection = db.getConnection()
        val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
        val data = statement.executeQuery("SELECT * FROM User")

        while (data.next()) {
          System.out.print("Data: " + data.getString("username"))
          // System.out.print("")
        }

        // remember to close the connection
        connection.close()

        data
      }
      catch {
        case exception: Exception => System.out.print("Error: " + exception.getMessage())
      }
    }(databaseExecutionContext)
  }

问题是我从带有Hikaripool 连接超时请求的 catch 方法中得到一个异常

--- (RELOAD) ---

2021-03-24 18:45:07 INFO  play.api.db.HikariCPConnectionPool  Shutting down connection pool.
2021-03-24 18:45:09 INFO  play.api.db.DefaultDBApi  Database [MyDB] initialized
2021-03-24 18:45:09 INFO  play.api.db.HikariCPConnectionPool  Creating Pool for datasource 'MyDB'
2021-03-24 18:45:09 INFO  play.api.http.EnabledFilters  Enabled Filters (see <https://www.playframework.com/documentation/latest/Filters>):

    play.filters.csrf.CSRFFilter
    play.filters.headers.SecurityHeadersFilter
    play.filters.hosts.AllowedHostsFilter

2021-03-24 18:45:09 INFO  play.api.Play  Application started (Dev) (no global state)
Error: HikariPool-15 - Connection is not available, request timed out after 60001ms.

您的帮助将不胜感激!

标签: mysqldatabasescalaplayframeworkconnection

解决方案


推荐阅读