Spring定时任务

1. 实现方式

Spring实现定时任务有两种方式:注解方式、 XML配置方式

1) 方式一: 注解方式

配置

    <!-- 包路径扫描 -->
    <context:component-scan base-package="spring.task"/>

    <!-- 定义线程池 -->
    <task:executor id="taskExecutor" pool-size="20" queue-capacity="100" rejection-policy="DISCARD_OLDEST"/>
     <!--定义定时任务 -->
    <task:scheduler id="threadPoolTaskScheduler" pool-size="10" />

    <!-- 定时器开关,实际上只需要下方的一行,其中属性均可不要 --> 
    <task:annotation-driven  executor="taskExecutor" scheduler="threadPoolTaskScheduler"/>

测试代码

在需要定时执行的方法上加上@Scheduled注解,并配上定时规则:

@Service
public class ScheduleTask {
    private static int i=0;
    /**
     * 通过cron方式配置定时
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void loopTaskCron(){
        System.out.println("loopTaskCron-------" + new Date() + "-------" + (i++) + "-------");
    }

    /**
     * 默认毫秒级别,定期执行任务
     */
    @Scheduled(fixedRate = 5 * 1000L)
    public void loopTaskFixRate(){
        System.out.println("loopTaskCronFixRate-------" + new Date() + "-------" + (i++) + "-------");
    }
    /**
     * 默认毫秒级别延迟执行任务
     */
    @Scheduled(fixedDelay = 5 * 1000L)
    public void loopTaskFixDelay(){
        System.out.println("fixedDelay-------" + new Date() + "-------" + (i++) + "-------");
    }

}

2)方式二:XML配置

配置

    <!-- 基于配置文件形式 -->
    <bean id="myTask" class="spring.task.ScheduleTask"></bean>
    <task:scheduled-tasks>
        <!--这里表示的是每隔五秒执行一次  -->
        <task:scheduled ref="myTask" method="loopTaskCron" cron="*/5 * * * * ?" />
        <task:scheduled ref="myTask" method="loopTaskFixRate" fixed-rate="5000" />
        <task:scheduled ref="myTask" method="loopTaskFixRateString" fixed-delay="5000" />
    </task:scheduled-tasks>

测试代码

public class ScheduleTask {
    private static int i=0;

    /**
     * 通过cron方式配置定时
     */
    public void loopTaskCron(){
        System.out.println("loopTaskCron-------" + new Date() + "-------" + (i++) + "-------");
    }

    /**
     * 默认毫秒级别,定期执行任务
     */
    public void loopTaskFixRate(){
        System.out.println("loopTaskFixRate-------" + new Date() + "-------" + (i++) + "-------");
    }

    /**
     * 默认毫秒级别,延迟执行任务
     */
    public void loopTaskFixDelay(){
        System.out.println("fixedDelay-------" + new Date() + "-------" + (i++) + "-------");
    }

}

2. 定时规则

Spring支持以下几种定时设置:

  • cron : 按照cron定义方式执行任务;
  • fixRate(fixRateString) : 按固定时间间隔执行任务,默认单位是毫秒,fixRateString支持字符串类型参数
  • fixDelay(fixedDelayString):按一定延迟执行任务,默认单位是毫秒,fixedDelayString支持字符串类型参数

3. cron定时配置

Spring支持的cron表达式由6个 由空格分隔的时间元素,按顺序依次为:

  • 秒 (0~59)
  • 分钟(0~59)
  • 小时(0~23)
  • 天(对应所在月的天数,0~31)
  • 月(0~11)
  • 天(星期, 1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)

其中每个元素可以是:

  • 一个值(如6)
  • 一个连续区间(9-12)
  • 一个间隔时间(8-18/4)(/表示每隔4小时)
  • 一个列表(1,3,5)
  • 通配符 “*”,表示所有可能的值
    注:由于”月份中的日期”和”星期中的日期”这两个元素互斥的,必须要对其中一个设置为”?”.

支持的特殊字符包括:

  • “*” 表示所有可能的值
  • “/” 字符用来指定数值的增量,如 分钟 里的“0/15”表示从第0分钟开始,每15分钟
  • “?” 字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
  • “L” 字符仅被用于天(月)和天(星期)两个子表达式, 是“Last”的缩写, “6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五
    注:“L”不要与指定列表或范围一起使用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值