Java EJB3.1@Schedule是否可以在应用程序代码之外配置?
如何配置计划间隔:Java EJB3.1@Schedule是否可以在应用程序代码之外配置?,java,java-ee-6,ejb-3.1,schedule,Java,Java Ee 6,Ejb 3.1,Schedule,如何配置计划间隔: @Schedule(persistent=true,minute=“*”,second=“*/5”,hour=“*” 在应用程序代码之外 如何在ejb-jar.xml中配置它 我可以在应用程序外部配置它(属性文件的类型) 根据EJB3.1规范,可以通过注释或通过ejbjar.xml部署描述符配置自动计时器 18.2.2自动定时器创建 计时器服务支持 基于 bean类中的元数据或 部署描述符。这允许bean开发人员安排一个计时器 不依赖于bean调用 以编程方式调用 计时器服务
@Schedule(persistent=true,minute=“*”,second=“*/5”,hour=“*”
在应用程序代码之外
根据EJB3.1规范,可以通过注释或通过
ejbjar.xml
部署描述符配置自动计时器
18.2.2自动定时器创建
计时器服务支持
基于
bean类中的元数据或
部署描述符。这允许bean开发人员安排一个计时器
不依赖于bean调用
以编程方式调用
计时器服务计时器创建方法。
自动创建的计时器是
因此由容器创建
应用程序部署
我对部署描述符XLM模式的理解是,您可以使用
元素中的
元素来定义它
<xsd:element name="timer"
type="javaee:timerType"
minOccurs="0"
maxOccurs="unbounded"/>
有关详细信息,请参见timerType
复杂类型的定义(特别是计划
和超时方法
元素)
工具书类
- EJB3.1规范
- 第18.2.2节“自动定时器创建”
- 第19.5节“部署描述符XML模式”(第580页,p583-p584)
- 以下是部署描述符中的调度示例:
<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>
<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>
谢谢你的来信
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表达式。假设我有几天,例如(周一、周二、周五)和工作时间(9-18),我如何应用此方法。对于@Schedule(second=“30”,minute=“*/5”,hour=“*”,persistent=false),这是不正确的在JBoss EAP 7.0.0中,这需要从
无状态
更改为单例
public class AppTimerService {
public void timeout(Timer timer) {
System.out.println("[in timeout method]");
}
}
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);