From c62c2337782ea0a243d5896e91a8c1fc1057a5fd Mon Sep 17 00:00:00 2001 From: Md Asif Date: Sat, 28 Sep 2024 02:08:42 +0530 Subject: [PATCH] Added HikariCP as connection pool manager for efficient database connection management. --- build.gradle.kts | 1 + .../kotlin/net/ipksindia/config/AppConfig.kt | 2 +- .../net/ipksindia/dao/DatabaseFactory.kt | 25 +++++++++++++++++++ .../net/ipksindia/dao/TransactionDao.kt | 13 +++------- 4 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 src/main/kotlin/net/ipksindia/dao/DatabaseFactory.kt diff --git a/build.gradle.kts b/build.gradle.kts index 526c725..1680a70 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -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") } diff --git a/src/main/kotlin/net/ipksindia/config/AppConfig.kt b/src/main/kotlin/net/ipksindia/config/AppConfig.kt index 8b793d7..264a5ba 100644 --- a/src/main/kotlin/net/ipksindia/config/AppConfig.kt +++ b/src/main/kotlin/net/ipksindia/config/AppConfig.kt @@ -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" } \ No newline at end of file diff --git a/src/main/kotlin/net/ipksindia/dao/DatabaseFactory.kt b/src/main/kotlin/net/ipksindia/dao/DatabaseFactory.kt new file mode 100644 index 0000000..f62a42a --- /dev/null +++ b/src/main/kotlin/net/ipksindia/dao/DatabaseFactory.kt @@ -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() + } +} \ No newline at end of file diff --git a/src/main/kotlin/net/ipksindia/dao/TransactionDao.kt b/src/main/kotlin/net/ipksindia/dao/TransactionDao.kt index 80cb305..6a4a546 100644 --- a/src/main/kotlin/net/ipksindia/dao/TransactionDao.kt +++ b/src/main/kotlin/net/ipksindia/dao/TransactionDao.kt @@ -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)