@EnableScheduling :在配置类上加上此注解,开启定时任务功能
@Scheduled(cron = "* * * * * *") :在需要做定时任务的方法上加上此注解,cron后的表达式与石英调度的一致。
@Scheduled(fixedRate = 1000*2) :也可以使用fixedRate 属性表示延迟多久执行一次。
被加了@Scheduled的方法在项目启动的时候就会被自动调用,不需要我们去调用。当然该方法的类一定是交于spring去管理的bean
package com.yiyoudao.config;import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;import java.util.concurrent.Executor;
@Configuration
@EnableAsync
@EnableScheduling
@ComponentScan(basePackages = {"com.yiyoudao"})
public class SpringThreadConfig implements AsyncConfigurer ,SchedulingConfigurer{
@Override
public Executor getAsyncExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(15);
taskExecutor.setMaxPoolSize(15);
taskExecutor.setQueueCapacity(50);
taskExecutor.initialize();
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
}
}
package com.yiyoudao.controller;import com.yiyoudao.service.SpringThread;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class SystemController {
@Autowired
private SpringThread springThread; @RequestMapping("/success")
public String test(){ springThread.thread01();
springThread.thread02();
return "success";
}
@Scheduled(fixedRate = 1000*2)
public void print(){
System.out.println("Annotation:print run");
}
@Scheduled(cron = "* * * * * *")
public void show(){
System.out.println("Annotation:is show run");
}
}