java springboot定时任务、创建线程池,创建定时任务
在Java Spring Boot中配置定时任务线程池有以下几个配置项:
spring.task.scheduling.pool.size
:指定定时任务线程池的大小,默认为1。spring.task.scheduling.thread-name-prefix
:指定线程名称的前缀,默认为task-
。spring.task.scheduling.await-termination-period
:指定在应用关闭时等待定时任务线程池终止的时间,默认为10秒。
下面是一个简单的定时任务线程池的代码示例:
@Configuration
@EnableScheduling
public class TaskSchedulerConfig implements SchedulingConfigurer {
private final int poolSize = 10;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(poolSize);
threadPoolTaskScheduler.setThreadNamePrefix("my-task-");
threadPoolTaskScheduler.initialize();
taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
在上述代码中,我们创建了一个大小为10的定时任务线程池,并设置了线程名称的前缀为my-task-
。然后,通过taskRegistrar.setTaskScheduler(threadPoolTaskScheduler)
将线程池配置应用到定时任务中。
接下来,我们可以使用上述定时任务线程池创建不同类型的定时任务。
- 定时任务延时执行:
@Component
public class DelayedTask {
@Scheduled(fixedDelay = 5000) // 每隔5秒执行一次
public void delayedTask() {
// 执行任务逻辑
}
}
- 定时执行任务:
@Component
public class ScheduledTask {
@Scheduled(cron = "0 0 0 * * *") // 每天的午夜执行
public void scheduledTask() {
// 执行任务逻辑
}
}
通过@Scheduled
注解可以指定任务的调度规则,如fixedDelay
表示间隔固定的时间执行,cron
表示基于Cron表达式的定时调度。
同时,还可以在需要的地方注入TaskScheduler
,手动创建定时任务:
@Component
public class ManualTask {
private final TaskScheduler taskScheduler;
public ManualTask(TaskScheduler taskScheduler) {
this.taskScheduler = taskScheduler;
}
public void scheduleTask() {
taskScheduler.schedule(() -> {
// 执行任务逻辑
}, new CronTrigger("0 0 0 * * *"));
}
}
通过调用taskScheduler.schedule()
方法可以手动创建一个定时任务,并指定任务的执行逻辑和调度规则。
注意:以上示例中的定时任务需要在入口类(如@SpringBootApplication
所标注的类)中添加@EnableScheduling
注解开启定时任务的支持。