SpingBoot中创建动态和静态定时任务

1,静态定时任务

         1,创建静态定时任务类,位置放在启动类同级目录或者子包下面,方便扫描到定时任务类上的注解。

         2,静态定时任务类需要三个注解:@Configuration,标记该类为配置类
                @EnableScheduling,标记类为定时任务类,@Scheduled(cron="0/30 * * * * ?"),//标记方法为定时任务,cron表达式:                  (0/30)从0秒开始,每隔30秒执行一次

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

/**
 * springboot设置静态的定时任务
 *
 */
//标记配置类
@Configuration
//标记该类开启定时任务
@EnableScheduling
public class ScheduleTest {

    //标记方法为定时任务
    //cron表达式:(0/30)从0秒开始,每隔30秒执行一次
    @Scheduled(cron="0/30 * * * * ?")
    public void show (){
        System.out.println("简单静态的定时任务!");
    }
}

    2,动态的定时任务

             1,动态定时任务类需要两个注解和实现一个接口

                   @Configuration 和 @EnableScheduling

                    实现接口:SchedulingConfigurer  // 接口的实现方法有多种,这里正式其中一种

            2,动态定时任务类:

import com.example.top.demo.configure.ScheduleConfigure;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;

import java.util.Date;

@Configuration
@EnableScheduling
public  class DymicSchedule  implements SchedulingConfigurer {


    /**
     * 定时任务配置类
     */
    @Autowired
    private ScheduleConfigure scheduleConfigure;


    /**
     * 需要执行的任务函数
     */
    protected  void processTask(){
        // 是否执行定时任务
        if(Boolean.valueOf(scheduleConfigure.getIsSwitch())){
            System.out.println("开始执行动态定时任务!");
        }

    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        // 添加触发器任务
        scheduledTaskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
                processTask();
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                // 任务触发,可修改任务的执行周期
                CronTrigger trigger = new CronTrigger(scheduleConfigure.getCrom());
                Date nextExec = trigger.nextExecutionTime(triggerContext);
                return nextExec;
            }
        });

    }

}

               3,动态定时任务类:ScheduleConfigure

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ScheduleConfigure {
    @Value("${task.switch}")
    private  String isSwitch ;
    @Value("${task.cron}")
    private  String crom ;

    public String getIsSwitch() {
        return isSwitch;
    }

    public void setIsSwitch(String isSwitch) {
        this.isSwitch = isSwitch;
    }

    public String getCrom() {
        return crom;
    }

    public void setCrom(String crom) {
        this.crom = crom;
    }
}

         4,相关yml文件配置

task:
  taskName: 第一个配置任务
  switch: true     #是否开启定时任务
  cron: "0/10 * * * * ?"  #定时任务执行周期,cron表达式

   总结:动态和静态定时任务的区别就是执行任务周期的cron表达式是在配置文件中还是代码中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值