Как настроить интервалы расписания:
@Schedule(persistent=true, minute="*", second="*/5", hour="*")
вне кода приложения?
- Как его настроить в ejb-jar.xml?
- Могу ли я настроить его вне приложения (вид файла свойств)?
Как настроить интервалы расписания:
@Schedule(persistent=true, minute="*", second="*/5", hour="*")
вне кода приложения?
Ниже приведен пример планирования в дескрипторе развертывания:
<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");
}
}
В соответствии со спецификацией 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
).
Для меня вариант 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);
Но я не могу найти, можем ли мы использовать выражения cron в EJB.