Added HikariCP as connection pool manager for efficient database connection management.

This commit is contained in:
Md Asif 2024-09-28 02:08:42 +05:30
parent 21a3f61152
commit c62c233778
4 changed files with 30 additions and 11 deletions

View File

@ -32,6 +32,7 @@ dependencies {
implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1")
implementation("org.slf4j:slf4j-api:2.0.16")
implementation("com.zaxxer:HikariCP:6.0.0")
testImplementation("io.ktor:ktor-server-test-host-jvm")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")
}

View File

@ -84,5 +84,5 @@ data class DatabaseConfig(
val user: String,
val password: String
) {
val dbUrl = "jdbc:oracle:thin:@$host:$port:$name"
val url = "jdbc:oracle:thin:@$host:$port:$name"
}

View File

@ -0,0 +1,25 @@
package net.ipksindia.dao
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import net.ipksindia.config.AppConfig
import java.sql.Connection
class DatabaseFactory private constructor() {
private val dataSource: HikariDataSource
init {
val config = HikariConfig()
config.jdbcUrl = AppConfig.databaseConfig.url
config.username = AppConfig.databaseConfig.user
config.password = AppConfig.databaseConfig.password
config.maximumPoolSize = 5
dataSource = HikariDataSource(config)
}
fun getConnection(): Connection = dataSource.connection
companion object {
val instance = DatabaseFactory()
}
}

View File

@ -1,17 +1,11 @@
package net.ipksindia.dao
import model.TransactionRequest
import net.ipksindia.config.AppConfig
import java.sql.Date
import java.sql.DriverManager
import java.sql.ResultSet
class TransactionDao() {
private val dbUrl = AppConfig.databaseConfig.dbUrl
private val dbUser = AppConfig.databaseConfig.user
private val dbPassword = AppConfig.databaseConfig.password
private val singleTransactionRequestQuery = """
SELECT
txn_no,
@ -69,8 +63,7 @@ class TransactionDao() {
""".trimIndent()
fun updateSuccessTransaction(request: TransactionRequest, transferQueueNumber: String, neftQueueNumber: String) {
DriverManager
.getConnection(dbUrl, dbUser, dbPassword)
DatabaseFactory.instance.getConnection()
.use { connection ->
connection
.prepareStatement(transactionUpdateQuery)
@ -100,8 +93,8 @@ class TransactionDao() {
}
fun getTransactionRequest(transactionNumber: String): TransactionRequest? {
return DriverManager
.getConnection(dbUrl, dbUser, dbPassword)
return DatabaseFactory.instance
.getConnection()
.use { connection ->
connection
.prepareStatement(singleTransactionRequestQuery)