"spring-boot通过@Scheduled配置定时任务及定时任务@Scheduled注解的方法"
Spring Boot 中的定时任务是通过 @Scheduled 注解来实现的,该注解可以将方法标记为定时任务,Spring Boot 会自动发现并执行这些方法。@Scheduled 注解可以设置定时任务的执行时间、执行频率、延迟执行等参数。
在 Spring Boot 中,@Scheduled 注解可以与 @Component 注解组合使用,以便将定时任务 Bean 注册到 Spring IoC 容器中。在以下代码中,我们可以看到一个简单的定时任务示例:
```java
@Component
public class ScheduledTimer {
private Logger logger = Logger.getLogger(this.getClass());
@Scheduled(cron="0 0/1 8-20 * * ?")
public void executeUpdateCuTask() {
Thread current = Thread.currentThread();
logger.info(" 定时任务1:"+current.getId()+ ",name:"+current.getName());
}
@Scheduled(cron="0 0/1 8-20 * * ?")
public void executeGetRepayTask() {
Thread current = Thread.currentThread();
logger.info(" 定时任务2:"+current.getId()+ ",name:"+current.getName());
}
}
```
在上面的代码中,我们使用 @Scheduled 注解将两个方法标记为定时任务,这两个方法将在指定的时间执行。@Scheduled 注解可以设置 cron 表达式、fixedRate、initialDelay、fixedDelay 等参数以控制定时任务的执行。
在 Spring Boot 中,我们可以使用 @Configuration 注解和 SchedulingConfigurer 接口来配置定时任务的执行器。在以下代码中,我们可以看到一个简单的配置示例:
```java
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
TaskScheduler taskScheduler = taskScheduler();
taskRegistrar.setTaskScheduler(taskScheduler);
}
@Bean(destroyMethod = "shutdown")
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(20);
scheduler.setThreadNamePrefix("task-");
scheduler.setAwaitTerminationSeconds(60);
scheduler.setWaitForTasksToCompleteOnShutdown(true);
return scheduler;
}
}
```
在上面的代码中,我们使用 @Configuration 注解和 SchedulingConfigurer 接口来配置定时任务的执行器。在 configureTasks 方法中,我们将 TaskScheduler 实例设置到 ScheduledTaskRegistrar 中,以便 Spring Boot 可以发现和执行定时任务。在 taskScheduler 方法中,我们创建了一个 ThreadPoolTaskScheduler 实例,并设置了线程池大小、线程名称前缀、等待终止秒数和等待任务完成的shutdown 等参数。
此外,在 Spring Boot 中,我们可以使用 @EnableScheduling 注解来启用定时任务的自动发现和执行。在以下代码中,我们可以看到一个简单的示例:
```java
@SpringBootApplication
@EnableScheduling
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
```
在上面的代码中,我们使用 @EnableScheduling 注解来启用定时任务的自动发现和执行。这样,Spring Boot 将自动发现和执行标记为 @Scheduled 的方法。
Spring Boot 通过 @Scheduled 注解和 SchedulingConfigurer 接口提供了强大的定时任务功能,我们可以根据需要自定义定时任务的执行时间、执行频率、延迟执行等参数,以满足不同的业务需求。