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

}

原文地址:https://www.cnblogs.com/createyuan/p/7736287.html