先写一个配置类
package com.yfy.springboot.config.schedul;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
/**
* @author yfy
* @create 2021-07-23-10-46
*/
@Configuration
@EnableScheduling
public class SchedulingConfig {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Scheduled(cron = "0/20 * * * * ?") // 每20秒执行一次
public void time() {
logger.info("time每20秒执行一次执行一次定时任务"+Thread.currentThread().getName());
}
@Scheduled(fixedDelay = 20000) // 上一次结束---》每20秒执行一次
public void time2() {
logger.info("time2上一次结束---》每20秒执行一次"+Thread.currentThread().getName());
}
@Scheduled(fixedRate = 20000) // 每20秒执行一次
public void time4() {
logger.info("time4每20秒执行一次执行一次定时任务"+Thread.currentThread().getName());
}
}
启动spring boot即可,触发定时任务
结果如下
定时任务没有问题,但是若配置多个定时任务,会发现是同一个线程池,所以不是同时触发,会有加载顺序,所以需要配置线程,完成同时触发
package com.yfy.springboot;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@MapperScan("com.yfy.springboot.dao")
@SpringBootApplication
@EnableScheduling
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
System.out.println("启动************************成功");
}
@Bean
public TaskScheduler taskScheduler(){
ThreadPoolTaskScheduler taskScheduler=new ThreadPoolTaskScheduler();
//线程池大小
taskScheduler.setPoolSize(10);
//线程池名称前缀
taskScheduler.setThreadNamePrefix("task---");
return taskScheduler;
}
}
此时就是多线程