zoukankan      html  css  js  c++  java
  • SpringBoot定时任务

    1、在启动类上写@EnableScheduling注解

    package com.mryx.matrix.codeanalyzer.web;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.scheduling.annotation.EnableScheduling;
    
    @EnableScheduling
    @SpringBootApplication
    @ComponentScan("com.mryx.matrix.codeanalyzer")
    @MapperScan("com.mryx.matrix.codeanalyzer.core.dao")
    @ServletComponentScan("com.mryx.matrix.codeanalyzer.web.filter")
    public class MatrixCodeAnalyzerApplication {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(MatrixCodeAnalyzerApplication.class);
    
        private static Integer taskId = 0;
    
        public static void main(String[] args) {
            SpringApplication.run(MatrixCodeAnalyzerApplication.class, args);
            LOGGER.info("MatrixCodeAnalyzerApplication start success!");
        }
    }

    2、在要定时任务的类上写@component

    3、在要定时执行的方法上写@Scheduled(cron = "0 0/5 * * * ?")。

    package com.mryx.matrix.codeanalyzer.web.job;
    
    import com.mryx.matrix.codeanalyzer.core.service.ProjectCodeScanTaskService;
    import com.mryx.matrix.codeanalyzer.domain.CodeScanResult;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.Resource;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    
    @Component
    public class CodeScanJob {
        private static final Logger logger = LoggerFactory.getLogger(CodeScanJob.class);
        private static Integer job = 0;
    
        @Resource
        private ProjectCodeScanTaskService projectCodeScanTaskService;
    
        //表示每5分钟执行
        @Scheduled(cron = "0 0/5 * * * ?")
        public void cronJob() throws InterruptedException {
            List<CodeScanResult> infos = projectCodeScanTaskService.getCodeScanInfo();
            Integer id = 0;
            for (CodeScanResult info : infos) {
                ++id;
                logger.info("id : {} {} {} {} {}", info.getId(), info.getTypeOfScan(), info.getAppCode(), info.getCodeBranch(), info.getGitAddress());
                SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
                String datetime = sf.format(new Date());
                String taskName = datetime + "job" + id;
                info.setTaskName(taskName);
                projectCodeScanTaskService.createCodeScanJob(info);
                Thread.sleep(20000);
            }
            logger.info("第{}次Job执行完成,共有{}个Job", ++job, id);
        }
    }

    cron表达式:
    * 第一位,表示秒,取值0-59
    * 第二位,表示分,取值0-59
    * 第三位,表示小时,取值0-23
    * 第四位,日期天/日,取值1-31
    * 第五位,日期月份,取值1-12
    * 第六位,星期,取值1-7,星期一,星期二...,注:不是第1周,第二周的意思,另外:1表示星期天,2表示星期一。
    * 第7为,年份,可以留空,取值1970-2099

    (*)星号:可以理解为每的意思,每秒,每分,每天,每月,每年...
    (?)问号:问号只能出现在日期和星期这两个位置。
    (-)减号:表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12
    (,)逗号:表达一个列表值,如在星期字段中使用“1,2,4”,则表示星期一,星期二,星期四
    (/)斜杠:如:x/y,x是开始值,y是步长,比如在第一位(秒) 0/15就是,从0秒开始,每15秒,最后就是0,15,30,45,60 另:*/y,等同于0/y

    eg:
    0 3 * * ? 每天3点执行
    5 3 * * ? 每天3点5分执行
    5 3 ? * * 每天3点5分执行,与上面作用相同
    5/10 3 * * ? 每天3点的 5分,15分,25分,35分,45分,55分这几个时间点执行
    10 3 ? * 1 每周星期天,3点10分 执行,注:1表示星期天
    10 3 ? * 1#3 每个月的第三个星期,星期天 执行,#号只能出现在星期的位置

     参考:https://www.cnblogs.com/qdhxhz/p/9058418.html

  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/xidian2014/p/10040845.html
Copyright © 2011-2022 走看看