如何配置计划间隔:
@Schedule(persistent=true, minute="*", second="*/5", hour="*")
在应用程序代码之外?
答案 0 :(得分:18)
以下是部署描述符中的调度示例:
<session>
<ejb-name>MessageService</ejb-name>
<local-bean/>
<ejb-class>ejb.MessageService</ejb-class>
<session-type>Stateless</session-type>
<timer>
<schedule>
<second>0/18</second>
<minute>*</minute>
<hour>*</hour>
</schedule>
<timeout-method>
<method-name>showMessage</method-name>
</timeout-method>
</timer>
</session>
配置计时器的另一种方法是使用程序化调度。
@Singleton
@Startup
public class TimedBean{
@Resource
private TimerService service;
@PostConstruct
public void init(){
ScheduleExpression exp=new ScheduleExpression();
exp.hour("*")
.minute("*")
.second("*/10");
service.createCalendarTimer(exp);
}
@Timeout
public void timeOut(){
System.out.println(new Date());
System.out.println("time out");
}
}
答案 1 :(得分:9)
根据EJB 3.1规范,可以通过注释或ejb-jar.xml
部署描述符配置自动计时器。
18.2.2自动定时器创建
定时服务支持 基于的自动创建计时器 bean类中的元数据或 部署描述符。这允许bean开发人员安排计时器 不依赖于bean调用 以编程方式调用其中一个 定时服务定时器创建方法。 自动创建的计时器是 由容器创建的结果 应用程序部署。
我对部署描述符XLM架构的理解是您使用<timer>
元素内的<session>
元素来定义它。
<xsd:element name="timer"
type="javaee:timerType"
minOccurs="0"
maxOccurs="unbounded"/>
有关详细信息,请参阅timerType
复杂类型的定义(特别是schedule
和timeout-method
元素。)
答案 2 :(得分:0)
对我来说,ejb-jar.xml变体开始在TomEE上工作,我只在超时方法中传递javax.ejb.Timer参数:
<session>
<ejb-name>AppTimerService</ejb-name>
<ejb-class>my.app.AppTimerService</ejb-class>
<session-type>Singleton</session-type>
<timer>
<schedule>
<second>*/10</second>
<minute>*</minute>
<hour>*</hour>
</schedule>
<timeout-method>
<method-name>timeout</method-name>
<method-params>
<method-param>javax.ejb.Timer</method-param>
</method-params>
</timeout-method>
</timer>
public class AppTimerService {
public void timeout(Timer timer) {
System.out.println("[in timeout method]");
}
}
感谢https://blogs.oracle.com/arungupta/entry/totd_146_understanding_the_ejb发帖。
您可以阅读.properties文件并以编程方式创建Timer
ScheduleExpression schedule = new ScheduleExpression();
schedule.hour(hourProperty);//previously read property from .properties file
schedule.minute(minuteProperty);//previously read property from .properties file
Timer timer = timerService.createCalendarTimer(schedule);
但我找不到可能在EJB中使用cron表达式。