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()+"<<<<<<<<<<<<");
        }

    }

  • 相关阅读:
    life
    Android通过XML来定义Menu
    Android通过XML来定义Menu
    Android开发之Menu:OptionMenu(选项菜单)、ContextMenu(上下文菜单)、SubMenu(子菜单)
    作为股权类投资人,我们的投资偏好和投资原则
    作为股权类投资人,我们的投资偏好和投资原则
    给TextView添加超链接的四种方式
    详解ExplosionField的使用,实现View的粉碎效果
    MySql中允许远程连接
    我的投资案例(3)-看好互联网和金融两大朝阳行业,参投入股垂直金融招聘平台"职业梦CareerDream.cn"
  • 原文地址:https://www.cnblogs.com/createyuan/p/7736287.html
Copyright © 2011-2022 走看看