У меня есть сценарий, в котором мне нужно прочитать из БД, обработать результаты, сделать вызов REST и затем обновить обработанный результат обратно в БД.
Теперь, когда я делаю это без обратных вызовов Asyn c с шаблоном OkHttp и Spring JDB C, который использует HikariCP, все идет гладко.
Но, как только я что-то делаю, как показано ниже, я получаю ошибку как java. sql .SQLException: HikariDataSource HikariDataSource (HikariPool-1) закрыт.
private fun updateEntityInDAM(json: JSONObject, entity: SomeEntity) {
getResponseFromDAM(json, object : Callback {
override fun onFailure(call: Call, e: IOException) {
logger.error("Update to DAM Failed. Exception thrown.", e)
}
override fun onResponse(call: Call, response: Response) {
response.use {
if(response.isSuccessful) {
addOrUpdateEntityInDB(entity)
} else {
processErrorRecord(response, entity)
}
}
response.close()
}
})
}
Я пробовал варианты jdbcTemplate.update (...), jdbcTemplate.run {update (...)}, а также что-то, как показано ниже
val connection = hikariDataSource.connection
if(connection.isClosed) {
logger.error("Update to DB failed. Connection is closed.")
} else {
val ps: PreparedStatement = connection.prepareStatement(updateSQL)
ps.executeUpdate()
connection.close()
}
Может кто-нибудь помочь здесь? Некоторое неправильное управление транзакциями происходит здесь, но обработка транзакций здесь на самом деле не требуется.
Спасибо!