spring@schleduled注解不起作用

p8ekf7hl  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(447)

我想要一个spring计划的任务,每10秒运行一次,但是由于某些原因,该任务只运行一次,并且不再重复。
请不要建议我使用其他类型的任务,因为我需要专门使用spring任务。

@Scheduled(fixedRate = 10000, initialDelay = 1000)
public void myTask() {
...
}

在我的主配置类中 @EnableScheduling 也添加了。

carvr3hs

carvr3hs1#

调度是一个在特定时间段内执行任务的过程,但是您希望将其异步化,因此会有一些更改
创建一个配置类来管理 Async 所以你要利用 ThreadPoolTaskExecutor :

@EnableScheduling
@Configuration
public class TaskConfig implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar)
    {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(10);
        threadPoolTaskScheduler.setThreadNamePrefix("your-scheduler-");
        threadPoolTaskScheduler.initialize();

        scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
    }
}

然后可以按以下方式异步运行作业:

@Component
public class HelloSender {

    @Scheduled(fixedRate = 10000)
    public void myTask() {

        System.out.println("im running asynchronous with Worker : " + Thread.currentThread().getName());
    }
}

更多关于 ThreadPoolTaskExecutor 请看这里:https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/scheduling.html

相关问题