У меня есть база данных 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)
}