在@Scheduled 中运行协程
Posted
技术标签:
【中文标题】在@Scheduled 中运行协程【英文标题】:Run coroutine inside @Scheduled 【发布时间】:2021-08-24 02:48:52 【问题描述】:我想运行一个周期性任务。在 Spring MVC 中它完美地工作。
现在我想集成 Spring Webflux + Kotlin Coroutines。
如何在@Scheduled
方法中调用挂起的函数?我希望它等到挂起的功能完成。
/// This function starts every 00:10 UTC
@Scheduled(cron = "0 10 0 * * *", zone = "UTC")
fun myScheduler()
// ???
suspend fun mySuspendedFunction()
// business logic
【问题讨论】:
【参考方案1】:fun myScheduler()
runBlocking
mySuspendedFunction()
这样协程就会在被阻塞的线程中运行。如果您需要在不同的线程中运行代码或并行执行多个协程,可以将调度程序(例如Dispatchers.Default
、Dispatchers.IO
)传递给runBlocking()
或使用withContenxt()
。
【讨论】:
以上是关于在@Scheduled 中运行协程的主要内容,如果未能解决你的问题,请参考以下文章