zoukankan      html  css  js  c++  java
  • work_31_任务调度的实现方法

    1.系统级别的定时任务: 临时文件清理、系统信息采集、日志文件切割

    2.用户级别的定时任务: 定时向互联网同步时间、定时备份系统配置文件、定时备份数据库的数据。

    1.使用SpringBoot创建定时任务(常用)

    基于注解(@Scheduled),实现定时任务

    BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口

    package org.springframework.beans.factory.config;
    
    import org.springframework.beans.BeansException;
    
    public interface BeanPostProcessor {
        //bean初始化方法调用前被调用
        Object postProcessBeforeInitialization(Object var1, String var2) throws BeansException;
       //bean初始化方法调用后被调用
        Object postProcessAfterInitialization(Object var1, String var2) throws BeansException;
    }

     

    @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Repeatable(Schedules.class)
    public @interface Scheduled {
        String cron() default "";
    
        String zone() default "";
    
        long fixedDelay() default -1L;
    
        String fixedDelayString() default "";
    
        long fixedRate() default -1L;
    
        String fixedRateString() default "";
    
        long initialDelay() default -1L;
    
        String initialDelayString() default "";
    }

    参数解释:

    1.Cron表达式参数分别表示:

    • 秒(0~59) 例如0/5表示每5秒
    • 分(0~59)
    • 时(0~23)
    • 日(0~31)的某天,需计算
    • 月(0~11)
    • 周几( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT)
    00 02 * * * ls           #每天的凌晨2点整执行
    00 02 1 * * ls           #每月的1日的凌晨2点整执行
    00 02 14 2 * ls          #每年的2月14日凌晨2点执行
    00 02 * * 7 ls           #每周天的凌晨2点整执行
    00 02 * 6 5 ls           #每年的6月周五凌晨2点执行
    00 02 14 * 7 ls          #每月14日或每周日的凌晨2点都执行
    00 02 14 2 7 ls          #每年的2月14日或每年2月的周天的凌晨2点执行   
    */10  02 * * * ls        #每天凌晨2点,每隔10分钟执行一次
    * * * * *  ls            #每分钟都执行
    00 00 14 2 * ls          #每年2月14日的凌晨执行命令 
    */5 * * * *  ls          #每隔5分钟执行一次
    00 02 * 1,5,8 * ls       #每年的1月5月8月凌晨2点执行
    00 02 1-8 * * ls         #每月1号到8号凌晨2点执行
    0 21 * * * ls            #每天晚上21:00执行
    45 4 1,10,22 * * ls      #每月1、10、22日的4:45执行
    45 4 1-10 * * ls         #每月1到10日的4:45执行
    3,15 8-11 */2 * * ls     #每隔两天的上午8点到11点的第3和第15分钟执行
    0 23-7/1 * * * ls        #晚上11点到早上7点之间,每隔一小时执行
    15 21 * * 1-5 ls         #周一到周五每天晚上21:15执行

    2.zone

    时区,接收一个java.util.TimeZone#IDcron表达式会基于该时区解析。默认是一个空字符串,即取服务器所在地的时区。比如我们一般使用的时区Asia/Shanghai。该字段我们一般留空。

    3.fixedDelay

    上一次执行完毕时间点之后多长时间再执行。如:

    @Scheduled(fixedDelayString = "5000") //上一次执行完毕时间点之后5秒再执行

    4. fixedDelayString

    fixedDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。如:

    @Scheduled(fixedDelayString = "${time.fixedDelay}")
        void testFixedDelayString() {
            System.out.println("Execute at " + System.currentTimeMillis());
        }

    5.fixedRate

    上一次开始执行时间点之后多长时间再执行。如:

    @Scheduled(fixedRate = 5000) //上一次开始执行时间点之后5秒再执行

    6.fixedRateString

    initialDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

    案例:

        /**
         * 功能描述:定时任务获取  每小时触发
         *
         * @author:hdh
         * @date: 2020/11/2 11:28
         */
        @Scheduled(cron = "0 0 * * * ?")
        private void getAppToken() {
    
            //获取
            Map<String, String> appRes = WeixinUtil.getAppAccessToken();
            if (appRes != null) {
                this.appletsService.saveAppToken(appRes.get("accessToken"), WEIXIN_WANS_APPID);
            }
        }

     7.基于接口(SchedulingConfigurer),实现定时任务

    springBoot起步类必须@EnableScheduling 开启。

    实现SchedulingConfigurer接口并且重写configureTasks方法。

    scheduledTaskRegistrar的实现类有以下:

     

    @Component
    public class TaskSchedulingConfigurer implements SchedulingConfigurer {
    
        private String cron = "* * * * * ?"; //调用set方法可动态设置时间规则
    
        private static Logger logger = LoggerFactory.getLogger(TaskSchedulingConfigurer.class);
    
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            scheduledTaskRegistrar.addCronTask(new Runnable() {
                @Override
                public void run() {
    
                    System.out.println("task......");
                }
            }, cron);
    
        }
    }

     

  • 相关阅读:
    JavaWeb--HttpSession案例
    codeforces B. Balls Game 解题报告
    hdu 1711 Number Sequence 解题报告
    codeforces B. Online Meeting 解题报告
    ZOJ 3706 Break Standard Weight 解题报告
    codeforces C. Magic Formulas 解题报告
    codeforces B. Sereja and Mirroring 解题报告
    zoj 1109 Language of FatMouse 解题报告
    hdu 1361.Parencodings 解题报告
    hdu 1004 Let the Balloon Rise 解题报告
  • 原文地址:https://www.cnblogs.com/asndxj/p/13925922.html
Copyright © 2011-2022 走看看