Spring @Scheduled
注释的默认实现产生单线程任务执行程序。
问题在于,有时方法无法正常停止并释放导致停机的线程。
一种可能的解决方案是实施SchedulingConfigurer
界面,如
@SpringBootApplication
@EnableScheduling
class Application implements SchedulingConfigurer {
static void main(String[] args) {
SpringApplication.run(Application.class, args)
}
@Override
void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor())
}
@Bean(destroyMethod = "shutdown")
Executor taskExecutor() {
return Executors.newScheduledThreadPool(100)
}
}
此解决方案创建了100个线程的安全缓冲区,但无法解决问题。
如何在特定超时后终止方法(使用@Scheduled
和cron表达式注释)?