码迷,mamicode.com
首页 > 编程语言 > 详细

spring boot定时任务

时间:2019-10-11 18:20:54      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:cti   beans   ddt   collect   时间   ase   sys   schedule   bst   

1  在启动类上添加:@EnableScheduling // 开启定时任务

2  实现调度器

   

import java.util.Date;
import org.apache.commons.lang3.StringUtils;
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 com.chobits81.cc.component.system.model.GnzlTrigger;
import com.chobits81.cc.component.system.service.DirectDefine;
/**
 * 定时调度器
 * @author Kyoxue
 */
public abstract class GnzlScheduler implements SchedulingConfigurer,DirectDefine{
    private String cron = StringUtils.EMPTY;
    @Override
    public void configureTasks(ScheduledTaskRegistrar arg0) {
        // TODO Auto-generated method stub
        arg0.addTriggerTask(runnable(), shcheduler());
    }
    
    private Runnable runnable() {
        return new Runnable() {
            @Override
            public void run() {
                boolean on = false;
                GnzlTrigger config = setup();
                if (null != config) {
                    //配置修改表达式这里同步更新定时时间
                    cron = StringUtils.trimToEmpty(config.getCron());
                    //任务开关
                    String onoff = config.getOnoff();
                    on = (StringUtils.isNotEmpty(onoff)&&"Y".equalsIgnoreCase(onoff))?true:false;
                }
                if (!on) {
                    LOG.warn("定时开关已关闭!");
                    return;
                }
                task();
            }
        };
    }

    private Trigger shcheduler() {
        return new Trigger() {
            @SuppressWarnings("deprecation")
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
               try {
                   if (!SCHEDULER_SWITCH_ON) {
//                       LOG.warn("定时触发器开关已关闭!");
                       return null;
                   }
                   //第一次springboot启动,初始化触发器,读取配置表达式
                   //初始化表达式如果为空或者格式不准确直接导致任务永久停止
                   //如果配置表没有表达式或错误格式,修改后springboot需要重启,才能启动定时触发器
                   GnzlTrigger config = setup();
                   if (null != config) {
                           cron = StringUtils.trimToEmpty(config.getCron());
                      }
                   CronTrigger trigger = new CronTrigger(cron);
                   return trigger.nextExecutionTime(triggerContext);
                } catch (Exception e) {
                    // TODO: handle exception
                    LOG.error("表达式定义异常!{}",e.getMessage());
                  return null;
                }
                
            }
        };
    }
    /**
     * 读取定时配置
     * @return
     */
    public abstract GnzlTrigger setup();
    /**
     * 覆盖定时内容
     */
    public abstract void task();
}

3 具体任务

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.chobits81.cc.component.system.dao.GnzlTriggerMapper;
import com.chobits81.cc.component.system.model.GnzlLog;
import com.chobits81.cc.component.system.model.GnzlTrigger;
import com.chobits81.cc.component.system.service.impl.DirectLogServiceImpl;
import com.chobits81.cc.component.system.service.impl.DirectMessageQService;
import com.chobits81.cc.component.system.service.impl.DirectMqEnum;
import com.chobits81.cc.component.util.Pagenation;

/**
 * 队列日志入库任务 
 * @author Kyoxue
 * @deprecated
 */
@Service
public class GnzlSchedulerSearchLog2db extends GnzlScheduler{
    
    @Autowired
    private GnzlTriggerMapper gnzlTriggerMapper;
    @Autowired
    private DirectMessageQService directMessageQService;
    @Autowired
    private DirectLogServiceImpl directLogServiceImpl;
    @Override
    public void task() {
        // TODO Auto-generated method stub
        try {
            //task code here...
        } catch (Exception e) {
            // TODO: handle exception
           LOG.error("{}{}异常了!{}",LOG_PREFIX_QNR,LOG_PREFIX_RUN_LOG2DB,e);
        }
    }
    @Override
    public GnzlTrigger setup() {
        // TODO Auto-generated method stub
        try {
            return gnzlTriggerMapper.selectBySName(KEY_GNZL_SEARCH_LOG2DB);
        } catch (Exception e) {
            // TODO: handle exception
            LOG.error("读取配置异常!",e);
        }
        return null;
    }

}

4定时配置表

CREATE TABLE `t_gnzl_trigger` (
  `sname` varchar(20) NOT NULL COMMENT 定时索引,
  `cron` varchar(64) NOT NULL COMMENT 表达式,
  `switch` char(1) NOT NULL DEFAULT N COMMENT 开关 Y|N,
  `remark` varchar(128) DEFAULT NULL COMMENT 再次擦除结果 Y:成功 N:失败,
  `createTime` datetime NOT NULL COMMENT 录入时间,
  `creater` varchar(64) NOT NULL DEFAULT GNZL COMMENT 录入人,
  `modifier` varchar(64) DEFAULT NULL,
  `modifyTime` datetime DEFAULT NULL,
  PRIMARY KEY (`sname`),
  UNIQUE KEY `sname` (`sname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=定时任务表;

5配置实例数据

技术图片

 

 



spring boot定时任务

标签:cti   beans   ddt   collect   时间   ase   sys   schedule   bst   

原文地址:https://www.cnblogs.com/ixixi/p/11655706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!