저는 scobra (cats)를 사용하여 scalatra 응용 프로그램에서 postgresql 데이터베이스에 연결했습니다. 최근에 나는 앱이 모든 거래에 대해 새로운 연결 풀을 생성하고 있음을 확인했습니다. 나는 결국 그것을 해결했다. 아래에서 볼 수 있겠지만,이 접근법은 'managing connections' section of the book of doobie에서 취한 것과는 상당히 다르다. 나는 누군가가 그것이 합당한 지 또는 연결 풀을 설정하는 좋은 방법이 있는지를 확인할 수 있기를 희망했다. 여기 Doobie와 히카리 연결 풀을 올바르게 처리하는 방법
내가 처음에 가지고 무엇 -이 작동하지만 모든 연결에 새로운 연결 풀을 생성합니다import com.zaxxer.hikari.HikariDataSource
import doobie.hikari.hikaritransactor.HikariTransactor
import doobie.imports._
val pgTransactor = HikariTransactor[IOLite](
"org.postgresql.Driver",
s"jdbc:postgresql://${postgresDBHost}:${postgresDBPort}/${postgresDBName}",
postgresDBUser,
postgresDBPassword
)
// every query goes via this function
def doTransaction[A](update: ConnectionIO[A]): Option[A] = {
val io = for {
xa <- pgTransactor
res <- update.transact(xa) ensuring xa.shutdown
} yield res
io.unsafePerformIO
}
내 초기 가정 문제가 모든 요청에 ensuring xa.shutdown
을 가지고 있지만, 신속하게 연결 결과 제거 된 것이 었습니다 남아 있지 않을 때까지 다 써 버린다. 나는 HikariDataSource
를 작성하여 원하는 동작을 가지고,
val pgTransactor: HikariTransactor[IOLite] = HikariTransactor[IOLite](
"org.postgresql.Driver",
s"jdbc:postgresql://${postgresDBHost}:${postgresDBPort}/${postgresDBName}",
postgresDBUser,
postgresDBPassword
).unsafePerformIO
def doTransaction[A](update: ConnectionIO[A]): Option[A] = {
val io = update.transact(pgTransactor)
io.unsafePerformIO
}
을 마지막으로 : -
이 문제를 해결하기 위해 시도했다가 ensuring xa.shutdown
을 제거하기 위해 나를 사용 가능하지만, 여전히 연결 풀 반복적으로 열려있는 결과와 폐쇄
val dataSource = new HikariDataSource()
dataSource.setJdbcUrl(s"jdbc:postgresql://${postgresDBHost}:${postgresDBPort}/${postgresDBName}")
dataSource.setUsername(postgresDBUser)
dataSource.setPassword(postgresDBPassword)
val pgTransactor: HikariTransactor[IOLite] = HikariTransactor[IOLite](dataSource)
def doTransaction[A](update: ConnectionIO[A], operationDescription: String): Option[A] = {
val io = update.transact(pgTransactor)
io.unsafePerformIO
}