1. 程式人生 > >springboot 定時任務

springboot 定時任務

time artifact tor xtend public 重復 test trigge lin

原文 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註解來設置任務的執行時間,並且使用三種屬性配置方式:
  1. fixedRate:定義一個按一定頻率執行的定時任務
  2. fixedDelay:定義一個按一定頻率執行的定時任務,與上面不同的是,改屬性可以配合initialDelay, 定義該任務延遲執行時間。
  3. 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 定時任務