天天看点

Spring Task定时任务的配置和使用详解

参考地址:http://www.cnblogs.com/chen-lhx/p/5581129.html

spring中使用定时任务

基于xml配置文件使用定时任务

首先配置spring开启定时任务

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

<

beans

xmlns

=

"http://www.springframework.org/schema/beans"

xmlns:xsi

=

"http://www.w3.org/2001/XMLSchema-instance"

xmlns:p

=

"http://www.springframework.org/schema/p"

xmlns:task

=

"http://www.springframework.org/schema/task"

xmlns:context

=

"http://www.springframework.org/schema/context"

xmlns:aop

=

"http://www.springframework.org/schema/aop"

xsi:schemaLocation="http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 

http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd 

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 

http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">

<

task:annotation-driven

/>

<!-- 定时器开关-->

<

bean

id

=

"myTask"

class

=

"com.spring.task.MyTask"

></

bean

>

<

task:scheduled-tasks

>

<!-- 这里表示的是每隔五秒执行一次 -->

<

task:scheduled

ref

=

"myTask"

method

=

"show"

cron

=

"*/5 * * * * ?"

/>

<

task:scheduled

ref

=

"myTask"

method

=

"print"

cron

=

"*/10 * * * * ?"

/>

</

task:scheduled-tasks

>

<!-- 自动扫描的包名 -->

<

context:component-scan

base-package

=

"com.spring.task"

/>

</

beans

>

定义自己的任务执行逻辑

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

package

com.spring.task;

public

class

MyTask {

public

void

show() {

System.out.println(

"show method 1"

);

}

public

void

print() {

System.out.println(

"print method 1"

);

}

}

基于注解使用定时任务

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

package

com.spring.task;

import

org.springframework.scheduling.annotation.Scheduled;

import

org.springframework.stereotype.Component;

@Component

public

class

MyTask2 {

@Scheduled

(cron =

"0 0 1 * * *"

)

public

void

show() {

System.out.println(

"show method 2"

);

}

@Scheduled

(fixedRate =

1000

*

2

public

void

print() {

System.out.println(

"print method 2"

);

}

}

这样,当项目启动,定时任务就会按照规则按时执行了。

Spring Boot中使用定时任务

Spring Boot中使用更加方便。

引入

springboot starter

1 2 3 4

<

dependency

>

<

groupId

>org.springframework.boot</

groupId

>

<

artifactId

>spring-boot-starter</

artifactId

>

</

dependency

>

在程序入口启动类添加

@EnableScheduling

,开启定时任务功能

1 2 3 4 5 6 7

@SpringBootApplication

@EnableScheduling

public

class

Application {

public

static

void

main(String[] args) {

SpringApplication.run(Application.

class

, args);

}

定义定时任务逻辑

1 2 3 4 5 6 7 8 9 10

@Component

public

class

MyTask3 {

private

int

count=

;

@Scheduled

(cron=

"*/6 * * * * ?"

)

private

void

process() {

System.out.println(

"this is scheduler task runing "

+(count++));

}

}

任务执行规则说明

先来看看

@Scheduled

注解的源码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

@Target

({ElementType.METHOD, ElementType.ANNOTATION_TYPE})

@Retention

(RetentionPolicy.RUNTIME)

@Documented

@Repeatable

(Schedules.

class

)

public

@interface

Scheduled {

String cron()

default

""

;

String zone()

default

""

;

long

fixedDelay()

default

-

1

;

String fixedDelayString()

default

""

;

long

fixedRate()

default

-

1

;

String fixedRateString()

default

""

;

long

initialDelay()

default

-

1

;

String initialDelayString()

default

""

;

}

可以看出,注解中可以传8种参数:

  1. cron:指定cron表达式
  2. zone:默认使用服务器默认时区。可以设置为

    java.util.TimeZone

    中的zoneId
  3. fixedDelay:从上一个任务完成开始到下一个任务开始的间隔,单位毫秒
  4. fixedDelayString:同上,时间值是

    String

    类型
  5. fixedRate:从上一个任务开始到下一个任务开始的间隔,单位毫秒
  6. fixedRateString:同上,时间值是

    String

    类型
  7. initialDelay:任务首次执行延迟的时间,单位毫秒
  8. initialDelayString:同上,时间值是

    String

    类型

    cron表达式的使用方法