Spring Boot 系列教程14-動態修改定時任務cron參數

動態修改定時任務cron參數

  • 不須要重啓應用就能夠動態的改變Cron表達式的值
  • 不能使用@Scheduled(cron = 「${jobs.cron}」)實現

DynamicScheduledTask.java

package com.jege.spring.boot.task;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

import com.jege.spring.boot.data.jpa.entity.User;
import com.jege.spring.boot.data.jpa.repository.UserRepository;

/** * @author JE哥 * @email 1272434821@qq.com * @description:動態修改定時任務cron參數 */
@Component
public class DynamicScheduledTask implements SchedulingConfigurer {
  private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

  private static final String DEFAULT_CRON = "0/5 * * * * ?";
  private String cron = DEFAULT_CRON;

  @Autowired
  private UserRepository userRepository;

  @Override
  public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    taskRegistrar.addTriggerTask(new Runnable() {
      @Override
      public void run() {
    if (!cron.equals(DEFAULT_CRON)) {
      User user = new User("je_ge", 20);
      userRepository.save(user);
    }
    // 定時任務的業務邏輯
    System.out.println("動態修改定時任務cron參數,當前時間:" + dateFormat.format(new Date()));
      }
    }, new Trigger() {
      @Override
      public Date nextExecutionTime(TriggerContext triggerContext) {
    // 定時任務觸發,可修改定時任務的執行週期
    CronTrigger trigger = new CronTrigger(cron);
    Date nextExecDate = trigger.nextExecutionTime(triggerContext);
    return nextExecDate;
      }
    });
  }

  public void setCron(String cron) {
    this.cron = cron;
  }
}

Application.java

@EnableScheduling

UserController.java

@Autowired
DynamicScheduledTask dynamicScheduledTask;

// 更新動態任務時間
@RequestMapping("/updateDynamicScheduledTask")
@ResponseBody
public AjaxResult updateDynamicScheduledTask() {
  dynamicScheduledTask.setCron("0/10 * * * * ?");
  return new AjaxResult().success();
}

user.jsp

updateDynamicScheduledTask : function() {//動態修改定時任務
    $.get("/user/updateDynamicScheduledTask", function(data) {
        if (data.meta.success) {//動態修改定時任務成功
            $.messager.alert('成功提示', "請從新刷新數據,有插入新的數據", 'info');
        } else {
            $.messager.alert('錯誤提示', data.meta.message, 'error');
        }
    }, 'json');
}

<a href="javascript:void(0)" class="easyui-linkbutton c8" iconCls="icon-search" data-url="updateDynamicScheduledTask">動態修改定時任務</a>

其餘關聯項目

源碼地址

https://github.com/je-ge/spring-bootjavascript

若是以爲個人文章對您有幫助,請打賞支持。您的支持將鼓勵我繼續創做!謝謝!
微信打賞
支付寶打賞java

相關文章
相關標籤/搜索