parent
c1748001d5
commit
a1ef9a4970
|
@ -8,11 +8,23 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableScheduling
|
@EnableScheduling
|
||||||
class SchedulerConfig {
|
class SchedulerConfig {
|
||||||
@Bean
|
@Bean(name = ["taskScheduler"])
|
||||||
fun taskScheduler(): ThreadPoolTaskScheduler {
|
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()
|
val scheduler = ThreadPoolTaskScheduler()
|
||||||
scheduler.poolSize = 2
|
scheduler.poolSize = 2
|
||||||
scheduler.setThreadNamePrefix("AudioContentRelease-Scheduler-")
|
scheduler.setThreadNamePrefix("AudioContentRelease-Scheduler-")
|
||||||
|
scheduler.setWaitForTasksToCompleteOnShutdown(true) // 종료 시 대기 설정
|
||||||
|
scheduler.setAwaitTerminationSeconds(10) // 최대 10초 대기
|
||||||
return scheduler
|
return scheduler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}")
|
@PostMapping("/pin-to-the-top/{id}")
|
||||||
@PreAuthorize("hasRole('CREATOR')")
|
@PreAuthorize("hasRole('CREATOR')")
|
||||||
fun pinToTheTop(
|
fun pinToTheTop(
|
||||||
|
|
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue