@Scheduled
@Component
@EnableScheduling // 注意:@EnableScheduling 通常放在配置类上,而不是任务类上
public class ScheduledDemo {
@Scheduled(fixedRate = 5000) // 每5秒执行一次
public void reportCurrentTime() {
LocalDateTime dateTime = LocalDateTime.now();
// 定义一个DateTimeFormatter实例,用于指定日期时间的格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 使用formatter来格式化dateTime,并输出结果
String formattedDateTime = dateTime.format(formatter);
// 打印结果
System.out.println("fixedRate-现在时间:" + formattedDateTime); // 输出: 2020-08-27 15:30:30
}
// 也可以使用 cron 表达式来定义复杂的执行计划
@Scheduled(cron = "0/5 * * * * ?") // 每5秒执行一次(与fixedRate=5000效果相同,但更灵活)
public void anotherTask() {
LocalDateTime dateTime = LocalDateTime.now();
// 定义一个DateTimeFormatter实例,用于指定日期时间的格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 使用formatter来格式化dateTime,并输出结果
String formattedDateTime = dateTime.format(formatter);
// 打印结果
System.out.println("cron-现在时间:" + formattedDateTime); // 输出: 2020-08-27 15:30:30
}
}
cron-现在时间:2024-08-27 15:41:15
fixedRate-现在时间:2024-08-27 15:41:18
cron-现在时间:2024-08-27 15:41:20
fixedRate-现在时间:2024-08-27 15:41:23
cron-现在时间:2024-08-27 15:41:25
fixedRate-现在时间:2024-08-27 15:41:28
cron-现在时间:2024-08-27 15:41:30
ThreadPoolTaskScheduler
@Configuration
public class SchedulerConfig {
@Bean
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(10); // 设置线程池的大小
scheduler.setThreadNamePrefix("scheduled-task-"); // 设置线程名称前缀
scheduler.setDaemon(true); // 设置守护线程
scheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略
return scheduler;
}
}
@Component
public class ThreadPoolTaskSchedulerDemo {
@Autowired
ThreadPoolTaskScheduler threadPoolTaskScheduler;
@PostConstruct
public void scheduleAtFixedRateTest() {
// 使用schedule方法安排一个任务
// 这里以Runnable为例,也可以使用Callable
Runnable task = () -> {
LocalDateTime dateTime = LocalDateTime.now();
// 定义一个DateTimeFormatter实例,用于指定日期时间的格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 使用formatter来格式化dateTime,并输出结果
String formattedDateTime = dateTime.format(formatter);
System.out.println("scheduleAtFixedRate-现在时间:" + formattedDateTime); // 输出: 2020-08-27 15:30:30
};
threadPoolTaskScheduler.scheduleAtFixedRate(task, 5000);
}
@PostConstruct
public void scheduleCronTriggerTest() {
// 使用schedule方法安排一个任务
// 这里以Runnable为例,也可以使用Callable
Runnable task = () -> {
LocalDateTime dateTime = LocalDateTime.now();
// 定义一个DateTimeFormatter实例,用于指定日期时间的格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 使用formatter来格式化dateTime,并输出结果
String formattedDateTime = dateTime.format(formatter);
System.out.println("CronTrigger-现在时间:" + formattedDateTime); // 输出: 2020-08-27 15:30:30
};
// 创建一个CronTrigger,指定Cron表达式(例如:每5分钟执行一次)
String cronExpression = "0/5 * * * * ?";
CronTrigger trigger = new CronTrigger(cronExpression);
threadPoolTaskScheduler.schedule(task, trigger);
}
}
scheduleAtFixedRate-现在时间:2024-08-27 16:00:13
CronTrigger-现在时间:2024-08-27 16:00:15
scheduleAtFixedRate-现在时间:2024-08-27 16:00:18
CronTrigger-现在时间:2024-08-27 16:00:20
scheduleAtFixedRate-现在时间:2024-08-27 16:00:23
CronTrigger-现在时间:2024-08-27 16:00:25
scheduleAtFixedRate-现在时间:2024-08-27 16:00:28
CronTrigger-现在时间:2024-08-27 16:00:30
scheduleAtFixedRate-现在时间:2024-08-27 16:00:33
CronTrigger-现在时间:2024-08-27 16:00:35
scheduleAtFixedRate-现在时间:2024-08-27 16:00:38
CronTrigger-现在时间:2024-08-27 16:00:40
quartz
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version> <!-- 请使用最新的版本 -->
</dependency>
public class MyQuartzJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
LocalDateTime dateTime = LocalDateTime.now();
// 定义一个DateTimeFormatter实例,用于指定日期时间的格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 使用formatter来格式化dateTime,并输出结果
String formattedDateTime = dateTime.format(formatter);
// 打印结果
System.out.println("MyQuartzJob cron-现在时间:" + formattedDateTime); // 输出: 2020-08-27 15:30:30
}
}
@Component
public class QuartzDemo {
@Autowired
Scheduler scheduler;
@PostConstruct
public void test() throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(MyQuartzJob.class)
.withIdentity("myJob", "myGroup")
.storeDurably()
.build();
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "myGroup")
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 每5秒执行一次
.build();
scheduler.scheduleJob(jobDetail, cronTrigger);
}
}
@Configuration
public class QuartzConfig {
@Bean
public Scheduler scheduler() {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = null;
try {
scheduler = schedulerFactory.getScheduler();
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
return scheduler;
}
}
MyQuartzJob cron-现在时间:2024-08-27 16:27:45
MyQuartzJob cron-现在时间:2024-08-27 16:27:50
MyQuartzJob cron-现在时间:2024-08-27 16:27:55