Spring定时任务

来源:互联网 发布:中学生网络交友新闻 编辑:程序博客网 时间:2024/05/16 16:11

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注解,并配上定时规则:

@Servicepublic 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”不要与指定列表或范围一起使用
原创粉丝点击