zoukankan      html  css  js  c++  java
  • spring

     使用Spring的@Scheduled实现定时任务

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:task="http://www.springframework.org/schema/task"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/task
            http://www.springframework.org/schema/task/spring-task-3.0.xsd">

    <context:annotation-config />
    <context:component-scan base-package="com.platform.freight"/>
    <task:annotation-driven/>
    </beans>


    Spring配置文件xmlns加入
    xmlns:task="http://www.springframework.org/schema/task"

    xsi:schemaLocation中加入
         http://www.springframework.org/schema/task
         http://www.springframework.org/schema/task/spring-task-3.0.xsd"

    Spring扫描注解的配置
    <context:component-scan base-package="com.imwoniu.*" />

    任务扫描注解
    <task:executor id="executor" pool-size="5" />  
    <task:scheduler id="scheduler" pool-size="10" />  
    <task:annotation-driven executor="executor" scheduler="scheduler" />



    代码实现
    @Scheduled(fixedRate = 5000)
    public void doSomething() {
        // something that should execute periodically
    }


    如果简单的定期调度不能满足,那么cron表达式提供了可能
    一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
    其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.


    @Component
    public class TaskDemo {
        
        @Scheduled(cron = "0 0 2 * * ?")  //每天凌晨两点执行
            void doSomethingWith(){
                logger.info("定时任务开始......");
                long begin = System.currentTimeMillis();
            
                //执行数据库操作了哦...
            
                long end = System.currentTimeMillis();
                logger.info("定时任务结束,共耗时:[" + (end-begin) / 1000 + "]秒");
        }
    }


    =====================
    package com.platform.freight.task.run;

    import com.platform.freight.common.interfaces.sys.JobService;
    import com.platform.freight.common.vo.BasisVo;
    import com.platform.util.LogUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;

    /**
     * Created by ASUS on 2017/10/12.
     */
    @Component
    public class DoTaskRun {

        @Autowired
        private JobService jobService;

        @Scheduled(cron = "0 0/1 * * * ?")
        public void runTaskJob(){
            LogUtils.info (">>>>>>>>>>定时计划开始<<<<<<<<<<<<");
            BasisVo basisVo=jobService.doRunTask();
            LogUtils.info

    (">>>>>>>>>>定时计划结束,返回信息:"+basisVo.getResultMsg()+"<<<<<<<<<<<<");
        }

    }

  • 相关阅读:
    java中的接口
    java中的多态
    java中的继承
    抽象和封装
    表单验证
    13、迭代器与生成器
    10、end关键字和Fibonacci series: 斐波纳契数列
    9、字典
    8、元组
    2、Python_Day_1_作业
  • 原文地址:https://www.cnblogs.com/createyuan/p/7736287.html
Copyright © 2011-2022 走看看