@Schedule аннотация запускается каждые несколько минут (или секунд) - программирование
Подтвердить что ты не робот

@Schedule аннотация запускается каждые несколько минут (или секунд)

Я хотел бы попытаться использовать аннотацию @Schedule следующим образом:

public class MyTestServlet extends HttpServlet {
    private static JcanLogger LOG = JcanLoggerFactory.getLogger(ServiceTestServlet.class);

    @EJB CronService cronService;

    public void service(HttpServletRequest req, HttpServletResponse resp) throws .... {
    ....
    cronService.iLive(); 
}
---
    @Local // because the ejb is in a servlet (there is no other jvm)
public interface CronService {

    public void iLive();
    public void runsEveryMinute();
}
---
@Singleton
public class CronServiceBean implements CronService {
    private static final JcanLogger LOG = JcanLoggerFactory.getLogger(CronServiceBean.class);

    @Schedule(minute="*")
    public void runsEveryMinute() {
        LOG.info(" runs EveryMinute ");
    }

    public void iLive() {
        LOG.info("iLive");

    }
 ---
 LOG
 ... 
 CronServiceBean:34  ] iLive

Основываясь на журнале, CronService живёт и хорошо, но запланированная задача "runningEveryMinute" не работает.

Как это должно работать с помощью запланированной задачи EJB?

4b9b3361

Ответ 1

В соответствии с Javadoc для аннотации @Schedule значения по умолчанию:

  • * для всех полей, кроме часа, минуты и секунды; и
  • 0 по часам, минутам и секундам по умолчанию.

Указывая minute="*" и оставляя час по умолчанию 0, он запрашивает, чтобы таймер запускался каждую минуту после полуночи в течение одного часа (то есть 00:00, 00:01, 00:02,..., 00:59), а затем снова не на следующий день. Вместо этого используйте:

@Schedule(hour="*", minute="*")

Для запуска каждые несколько секунд (например, 10 секунд) вы можете использовать синтаксис cron:

@Schedule(hour = "*", minute = "*", second = "*/10", persistent = false)

По умолчанию планировщик сохраняет события. Установка persistent = false не позволит им со временем наращивать, если это необходимо.