Почему мой db read блокирует мой сервер Play Framework? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть база данных MySQL, размещенная на сервере AWS RDS и Play Framework с использованием экземпляра AWS EC2.Все остальные мои конечные точки API работают нормально, но каждый раз, когда к моей базе данных подключается несколько соединений, мой сервер на какое-то время отключается.Я провел некоторое исследование и думаю, что это может быть связано с пулами потоков, или запрос блокируется.Это мой код действия:

def getDataFromDB = Action {
  val conn = db.getConnection()
  var qJsonArray: JsArray = Json.arr()

  try {
    val stmt = conn.createStatement
    val query = "SELECT * FROM table"
    val rs = stmt.executeQuery(query)
    val rsmd = rs.getMetaData
    val columnCount = rsmd.getColumnCount

    while (rs.next) {
      var index = 1

      var rsJson: JsObject = Json.obj()
      while (index <= columnCount) {
        val column = rsmd.getColumnLabel(index)
        val columnLabel = column.toLowerCase()
        val value = rs.getObject(column)

        if (value == null) {
          rsJson = rsJson ++ Json.obj(
            columnLabel -> JsNull
          )
        } else if (value.isInstanceOf[Integer]) {
          rsJson = rsJson ++ Json.obj(
            columnLabel -> value.asInstanceOf[Int]
          ) 
        } else if (value.isInstanceOf[String]) {
          rsJson = rsJson ++ Json.obj(
            columnLabel -> value.asInstanceOf[String]
          )
        } else if (value.isInstanceOf[Date]) {
          rsJson = rsJson ++ Json.obj(
            columnLabel -> value.asInstanceOf[Date].getTime
          )
        } else {
          throw new IllegalArgumentException("oh no")
        }
        index += 1
      }
      qJsonArray = qJsonArray :+ rsJson
    }
  } finally {
    conn.close()
  }
  Ok(qJsonArray)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...