diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SchedulerConfig.kt b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SchedulerConfig.kt index 116acc6..a6a982a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SchedulerConfig.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SchedulerConfig.kt @@ -8,11 +8,23 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler @Configuration @EnableScheduling class SchedulerConfig { - @Bean + @Bean(name = ["taskScheduler"]) fun taskScheduler(): ThreadPoolTaskScheduler { + val scheduler = ThreadPoolTaskScheduler() + scheduler.poolSize = 5 + scheduler.setThreadNamePrefix("DefaultScheduler-") + scheduler.setWaitForTasksToCompleteOnShutdown(true) // 종료 시 대기 설정 + scheduler.setAwaitTerminationSeconds(10) // 최대 10초 대기 + return scheduler + } + + @Bean(name = ["audioContentReleaseScheduler"]) + fun audioContentReleaseScheduler(): ThreadPoolTaskScheduler { val scheduler = ThreadPoolTaskScheduler() scheduler.poolSize = 2 scheduler.setThreadNamePrefix("AudioContentRelease-Scheduler-") + scheduler.setWaitForTasksToCompleteOnShutdown(true) // 종료 시 대기 설정 + scheduler.setAwaitTerminationSeconds(10) // 최대 10초 대기 return scheduler } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt index 750a882..2a2a983 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt @@ -193,12 +193,6 @@ class AudioContentController(private val service: AudioContentService) { ) } - @PostMapping("/release") - @PreAuthorize("hasRole('BOT')") - fun releaseContent() = run { - ApiResponse.ok(service.releaseContent()) - } - @PostMapping("/pin-to-the-top/{id}") @PreAuthorize("hasRole('CREATOR')") fun pinToTheTop( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/scheduler/AudioContentReleaseScheduledTask.kt b/src/main/kotlin/kr/co/vividnext/sodalive/scheduler/AudioContentReleaseScheduledTask.kt new file mode 100644 index 0000000..503b028 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/scheduler/AudioContentReleaseScheduledTask.kt @@ -0,0 +1,31 @@ +package kr.co.vividnext.sodalive.scheduler + +import kr.co.vividnext.sodalive.content.AudioContentService +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler +import org.springframework.scheduling.support.CronTrigger +import org.springframework.stereotype.Component +import java.util.concurrent.ScheduledFuture +import javax.annotation.PostConstruct +import javax.annotation.PreDestroy + +@Component +class AudioContentReleaseScheduledTask( + private val audioContentService: AudioContentService, + private val audioContentReleaseScheduler: ThreadPoolTaskScheduler +) { + private var scheduledTask: ScheduledFuture<*>? = null + + @PostConstruct + fun release() { + scheduledTask = audioContentReleaseScheduler.schedule( + { audioContentService.releaseContent() }, + CronTrigger("0 0/15 * * * *") + ) + } + + @PreDestroy + fun stopReleaseScheduler() { + scheduledTask?.cancel(false) + audioContentReleaseScheduler.shutdown() + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/scheduler/AudioContentReleaseSchedulerService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/scheduler/AudioContentReleaseSchedulerService.kt deleted file mode 100644 index a6b847f..0000000 --- a/src/main/kotlin/kr/co/vividnext/sodalive/scheduler/AudioContentReleaseSchedulerService.kt +++ /dev/null @@ -1,15 +0,0 @@ -package kr.co.vividnext.sodalive.scheduler - -import kr.co.vividnext.sodalive.content.AudioContentService -import org.springframework.scheduling.annotation.Scheduled -import org.springframework.stereotype.Service - -@Service -class AudioContentReleaseSchedulerService( - private val audioContentService: AudioContentService -) { - @Scheduled(cron = "0 0/15 * * * *") - fun release() { - audioContentService.releaseContent() - } -}