springboot 定時任務
原文 https://blog.csdn.net/wqh8522/article/details/79224290
1. 使用Timer
public class TestTimer { public static void main(String[] args) { TimerTask timerTask = new TimerTask() { @Override public void run() { System.out.println("task run:"+ new Date()); } }; Timer timer= new Timer(); //安排指定的任務在指定的時間開始進行重復的固定延遲執行。這裏是每3秒執行一次 timer.schedule(timerTask,10,3000); } }
2.ScheduledExecutorService
public class TestScheduledExecutorService { public static void main(String[] args) { ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();// 參數:1、任務體 2、首次執行的延時時間 // 3、任務執行間隔 4、間隔時間單位 service.scheduleAtFixedRate(()->System.out.println("task ScheduledExecutorService "+new Date()), 0, 3, TimeUnit.SECONDS); } }
3.多線程執行
@Configuration //config包中加 @EnableAsync public class AsyncConfig { /* 此處成員變量應該使用@Value從配置中讀取*/ private int corePoolSize = 10; private int maxPoolSize = 200; private int queueCapacity = 10; @Bean public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(corePoolSize); executor.setMaxPoolSize(maxPoolSize); executor.setQueueCapacity(queueCapacity); executor.initialize(); return executor; } }
然後在定時任務的類或者方法上添加@Async
我們在方法上使用@Scheduled註解來設置任務的執行時間,並且使用三種屬性配置方式:
- fixedRate:定義一個按一定頻率執行的定時任務
- fixedDelay:定義一個按一定頻率執行的定時任務,與上面不同的是,改屬性可以配合
initialDelay
, 定義該任務延遲執行時間。 - cron:通過表達式來配置任務執行時間
整合Quartz
springboot2.0之後的
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
else
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
public class TestQuartz extends QuartzJobBean {
/**
* 執行定時任務
* @param jobExecutionContext
* @throws JobExecutionException
*/
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("quartz task "+new Date());
}
}
@Configuration
public class QuartzConfig {
@Bean
public JobDetail teatQuartzDetail(){
return JobBuilder.newJob(TestQuartz.class).withIdentity("testQuartz").storeDurably().build();
}
@Bean
public Trigger testQuartzTrigger(){
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10)
//設置時間周期單位秒
.repeatForever();
return TriggerBuilder.newTrigger().forJob(teatQuartzDetail()) .withIdentity("testQuartz") .withSchedule(scheduleBuilder) .build();
}
}
springboot 定時任務