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("com.squareup.okhttp3:okhttp:4.12.0")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1")
implementation("org.slf4j:slf4j-api:2.0.16") implementation("org.slf4j:slf4j-api:2.0.16")
implementation("com.zaxxer:HikariCP:6.0.0")
testImplementation("io.ktor:ktor-server-test-host-jvm") testImplementation("io.ktor:ktor-server-test-host-jvm")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version") testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")
} }

View File

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