EJB3.1 @Schedule 定时服务

我们在ejb中实现定时服务一般是实现TimerService接口,那么ejb3.1给我们带来了另一种实现定时服务的方式,就是@Schedule标注

@Schedule可用于自动创建一个timer,里面可以加入参数来限制调度时间。当一个方法被标注@Schedule后,到时间了就会自动被容器回调。

例如下例:

@Stateless
public class TimingManager {

@Schedule(minute="*",dayOfWeek="*",hour="*")
public void run() {

System.out.println("TimingManager run");
}

}

当容器运行以后,会自动执行@Schedule的方法,上例意思是每天每小时每分钟执行一次

Schedule表达式采用了模仿UNIX cron的日历语法格式。有8个主要属性可以按照下列的规则使用:

 

属性

属性值

示例

second

[0, 59]

second = "10"

minute

[0, 59]

minute = "30"

hour

[0, 23]

hour = "10"

dayOfMonth

- [1, 31] - day of the month 

- Last - last day of the month

- -[1, 7] - number of days before end of month

- {"1st", "2nd", "3rd", "4th", "5th", ..., "Last"} {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}- identifies a single occurrence of a day of the month 

dayOfMonth = "3"

dayOfMonth = "Last"

dayOfMonth = "-5"

dayOfMonth = "1st Tue"

month

- [1, 12] - month of the year

- {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}- month name

month = "7"

month = "Jan"

dayOfWeek

- [0, 7]- day of the week where both 0 and 7 refer to Sunday

- {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}- day's name

dayOfWeek = "5"

 

dayOfWeek = "Wed"

year

Four digit calendar year

year = "1978"

timezone

Id of the related timezone

timezone = "America/New_York"

 

每个属性值还有不同形式:

  

表达式类型

描述

示例

Single Value

限制属性只有一个值

dayOfWeek = "Wed"

Wild Card

对于给定的属性,允许任意合法值

month = "*"

List

限制属性允许两个或两个以上的值,中间用逗号隔开

DayOfMonth = "3,10,23"

dayOfWeek = "Wed,Sun"

Range

限制属性在一个封闭的区间段内

year = "1978-1984"

Increments 

定义一个x/y 的表达式。限制属性在每y 秒调度一次,并且在x 时开始。

second = "*/10" - every 10 seconds

hour = "12/2"- every second hour starting at noon

  

再来多看一些示例吧:

 

每周二上午7:30开始调度:

 

@Schedule(hour = "7", minute = "30",  dayOfWeek = "Tue")

 

每周从周一到周五的,7点,15点,20点开始调度:

 

@Schedule(hour = "7, 15, 20", dayOfWeek = "Mon-Fri")

 

每周日的每个小时调度一次:

 

@Schedule(hour = "*", dayOfWeek = "0")

 

Last Friday of December, at 12 

 

每年12月的最后一个周五12时调用一次:

 

@Schedule(hour = "12", dayOfMonth = "Last Fri", month="Dec")

 

2009年每个月的最后三天的20点开始调用:

 

@Schedule(hour = "20", dayOfMonth = "-3", year="2009")

 

从下午三点开始,每个小时的第5分钟开始调用:

 

@Schedule(minute = "*/5", hour = "15/1")



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值