Springboot Scheduled 动态配置

Scheduled 表达式:
https://blog.csdn.net/qq_33556185/article/details/51852537

      按顺序依次为
      1  秒(0~59)
      2  分钟(0~59)
      3 小时(0~23)
      4  天(0~31)
      5 月(0~11)
      6  星期(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
      7.年份(1970-2099)
      其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.


      字段       允许值         允许的特殊字符
       秒           0-59           , - * /
       分           0-59           , - * /
       小时           0-23           , - * /
       日期           1-31           , - * ? / L W C
       月份           1-12 或者 JAN-DEC           , - * /
       星期           1-7 或者 SUN-SAT           , - * ? / L C #
       年(可选)           留空, 1970-2099           , - * /
import org.springframework.scheduling.annotation.SchedulingConfigurer;

@Component
public class Task implements SchedulingConfigurer {

    private static String CRON;
    private static String CRON_SCOPE;

    static {
        CRON = PropertyUtil.getProperty("local.cron");
        CRON_SCOPE = PropertyUtil.getProperty("local.cron.scope");
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        scheduledTaskRegistrar.addTriggerTask(() -> {

        System.out.println("===========定时任务逻辑===========");
            
        }, triggerContext -> {
            // 任务触发,可修改任务的执行周期
            CronTrigger trigger = new CronTrigger(CRON);
            return trigger.nextExecutionTime(triggerContext);
        });
    }
}

配置文件

#日志采集定时执行时间
local.cron=0 */1 * * * ?
#每次采集{local.cron.scope}分钟前的日志
local.cron.scope=5
package com.idss.argus.monitor.thread.moduleAlarm;

import com.idss.argus.monitor.common.MonitorFileProperties;
import com.idss.argus.monitor.thread.alarmInterface.IAlarmInfo;
import com.idss.argus.monitor.thread.alarmInterface.IConfigurationInfo;
import com.idss.argus.monitor.thread.alarmInterface.IMonitorInfo;
import com.idss.argus.monitor.thread.alarmInterface.ISendMail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * Created by flyqx on 2018/7/20.
 */
@Component
@Configurable
@EnableScheduling
@PropertySource("classpath:config/monitor/properties/monitor.properties")
public class ModuleMonitorThread {
    //从zabbix取组件数据的时间单位
    private long alarm_interval = Long.parseLong(MonitorFileProperties.getProperties(MonitorFileProperties.INTERVAL_MOUDLE_DETAIL__ZABBIX));


    @Autowired
    @Qualifier("moduleConfiguration")
    private IConfigurationInfo moduleConfiguration;
    @Autowired
    @Qualifier("moduleMonitorInfo")
    private IMonitorInfo moduleMonitorInfo;
    @Autowired
    @Qualifier("moduleAlarmInfo")
    private IAlarmInfo moduleAlarmInfo;
    @Autowired
    @Qualifier("moduleSendMail")
    private ISendMail moduleSendMail;


    //每隔10秒进行一次告警
    @Scheduled(cron = "${monitor.module.detail.mysql.interval}")
    public void run() {
        String swich_flg = MonitorFileProperties.getProperties(MonitorFileProperties.ALARM_MODULE_SWICH);
        //开关为"开"时,执行
        if (swich_flg.equals("1")) {
            try {
                moduleMonitor();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private void moduleMonitor() {
        ModuleAlarmThread moduleAlarmThread = new ModuleAlarmThread(alarm_interval, moduleConfiguration,
                moduleMonitorInfo, moduleAlarmInfo, moduleSendMail);
        Thread alarm = new Thread(moduleAlarmThread);
        alarm.run();
    }
}

你可能感兴趣的:(Springboot Scheduled 动态配置)