Skip to content

Commit 89d238d

Browse files
committed
update: batch insert exposed dsl
1 parent d3aff47 commit 89d238d

File tree

6 files changed

+35
-79
lines changed

6 files changed

+35
-79
lines changed

build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ dependencies {
5454
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
5555
testImplementation("org.springframework.security:spring-security-test")
5656
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
57+
implementation("org.jetbrains.exposed:exposed-core:0.45.0")
58+
implementation("org.jetbrains.exposed:exposed-dao:0.45.0")
59+
implementation("org.jetbrains.exposed:exposed-jdbc:0.45.0")
60+
implementation("org.jetbrains.exposed:exposed-java-time:0.45.0")
5761
}
5862

5963
dependencyManagement {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package gogo.gogobetting.domain.betting.result.persistence
2+
3+
import org.jetbrains.exposed.sql.Table
4+
5+
object BettingResultTable : Table("tbl_betting_result") {
6+
val bettingId = long("betting_id")
7+
val earnedPoint = long("earned_point")
8+
val isCancelled = bool("is_cancelled")
9+
val isPredicted = bool("is_predicted")
10+
}

src/main/kotlin/gogo/gogobetting/infra/batch/dto/BettingResultJdbcDto.kt renamed to src/main/kotlin/gogo/gogobetting/infra/batch/dto/BettingResultExposedDto.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package gogo.gogobetting.infra.batch.dto
22

3-
data class BettingResultJdbcDto(
3+
data class BettingResultExposedDto(
44
val bettingId: Long,
55
val earnedPoint: Long,
66
val isPredicted: Boolean,

src/main/kotlin/gogo/gogobetting/infra/batch/service/BettingProcessor.kt

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/main/kotlin/gogo/gogobetting/infra/batch/service/BettingResultWriter.kt

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,31 @@ package gogo.gogobetting.infra.batch.service
22

33
import gogo.gogobetting.domain.batch.detail.persistence.BatchDetail
44
import gogo.gogobetting.domain.batch.detail.persistence.BatchDetailRepository
5-
import gogo.gogobetting.domain.batch.root.event.MatchBatchEvent
6-
import gogo.gogobetting.domain.batch.root.event.StudentBettingDto
75
import gogo.gogobetting.domain.batch.root.persistence.BatchRepository
6+
import gogo.gogobetting.domain.betting.result.persistence.BettingResultTable
87
import gogo.gogobetting.domain.betting.root.persistence.BettingRepository
98
import gogo.gogobetting.global.kafka.publisher.BatchPublisher
10-
import gogo.gogobetting.infra.batch.dto.BettingResultJdbcDto
9+
import gogo.gogobetting.infra.batch.dto.BettingResultExposedDto
1110
import gogo.gogobetting.infra.batch.dto.BettingRow
11+
import org.jetbrains.exposed.sql.Database
12+
import org.jetbrains.exposed.sql.batchInsert
13+
import org.jetbrains.exposed.sql.transactions.transaction
1214
import org.slf4j.LoggerFactory
1315
import org.springframework.batch.core.StepExecution
1416
import org.springframework.batch.core.annotation.AfterStep
1517
import org.springframework.batch.core.annotation.BeforeStep
1618
import org.springframework.batch.core.configuration.annotation.StepScope
1719
import org.springframework.batch.item.Chunk
1820
import org.springframework.batch.item.ItemWriter
19-
import org.springframework.batch.item.database.JdbcBatchItemWriter
2021
import org.springframework.beans.factory.annotation.Value
2122
import org.springframework.data.repository.findByIdOrNull
2223
import org.springframework.stereotype.Component
23-
import java.util.UUID
24+
import javax.sql.DataSource
2425
import kotlin.math.ceil
2526

2627
@Component("springBatchBettingWriter")
2728
@StepScope
2829
class BettingResultWriter(
29-
private val jdbcWriter: JdbcBatchItemWriter<BettingResultJdbcDto>,
3030
private val batchDetailRepository: BatchDetailRepository,
3131
private val batchRepository: BatchRepository,
3232
private val bettingRepository: BettingRepository,
@@ -35,11 +35,12 @@ class BettingResultWriter(
3535
@Value("#{jobParameters['bettingOdds']}") private val bettingOdds: Double,
3636
@Value("#{jobParameters['matchId']}") private val matchId: Long,
3737
@Value("#{jobParameters['aTeamScore']}") private val aTeamScore: Int,
38-
@Value("#{jobParameters['bTeamScore']}") private val bTeamScore: Int
38+
@Value("#{jobParameters['bTeamScore']}") private val bTeamScore: Int,
39+
private val dataSource: DataSource
3940
) : ItemWriter<BettingRow> {
4041

4142
private var batchId: Long = 0
42-
private val accumulated = mutableListOf<BettingResultJdbcDto>()
43+
private val accumulated = mutableListOf<BettingResultExposedDto>()
4344
private val log = LoggerFactory.getLogger(this::class.java)
4445

4546
@BeforeStep
@@ -52,14 +53,23 @@ class BettingResultWriter(
5253
val dtoList = items.map { row ->
5354
val isPredicted = row.predictedWinTeamId == winTeamId
5455
val earnedPoint = if (isPredicted) ceil(row.point * bettingOdds).toLong() + row.point else 0L
55-
BettingResultJdbcDto(
56+
BettingResultExposedDto(
5657
bettingId = row.id,
5758
earnedPoint = earnedPoint,
5859
isPredicted = isPredicted,
5960
)
6061
}
6162

62-
jdbcWriter.write(Chunk(dtoList))
63+
Database.connect(dataSource)
64+
transaction {
65+
BettingResultTable.batchInsert(dtoList) { item ->
66+
this[BettingResultTable.bettingId] = item.bettingId
67+
this[BettingResultTable.earnedPoint] = item.earnedPoint
68+
this[BettingResultTable.isCancelled] = false
69+
this[BettingResultTable.isPredicted] = item.isPredicted
70+
}
71+
}
72+
6373
accumulated.addAll(dtoList)
6474
}
6575

src/main/kotlin/gogo/gogobetting/infra/batch/service/BettingWriterConfig.kt

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)