Использование таймеров EJB
Если вы используете WebSphere Liberty или OpenLiberty, вы можете просто включить функцию ejbLite-3.2
в вашем файле server.xml, чтобы просто извлечьФункциональность EJB Lite (включая непостоянные таймеры EJB):
<featureManager>
<feature>ejbLite-3.2</feature>
</feature>
Если вы хотите постоянные EJB таймеры, вы можете включить полную функцию ejb-3.2
.
Обратите внимание, что код, который вы разместили в исходном вопросе, взят из JavaEE, а не из MicroProfile, но серверы Liberty поддерживают совместное использование технологий JavaEE и MicroProfile на одном сервере.
Использование Java EE Concurrency
Еще одна более современная / легковесная альтернатива непостоянным таймерам EJB - утилиты JavaEE Concurrency.Это можно включить с помощью функции concurrent-1.0
в файле server.xml:
<featureManager>
<feature>concurrent-1.0</feature>
</featureManager>
Чтобы использовать ее, вы можете отправить объект Callable
или Runnable
в ManagedScheduledExecutorService
вот так:
@Resource
ManagedScheduledExecutorService exec;
// ...
public void startWork() {
// Use a Java 8 lambda to define the Runnable
exec.scheduleAtFixedRate(() -> {
System.out.println("This will run every 30 seconds.");
}, 30, TimeUnit.SECONDS);
}
Если вы только начинаете писать это приложение, я бы рекомендовал использовать Java EE Concurrency Utilities поверх таймеров EJB, поскольку EE Concurrency более легок, и MicroProfile в настоящее время ищетвключить аналогичную функциональность в проект MicroProfile Concurrency .Однако, если вам нужно использовать постоянные задачи, используйте таймеры EJB.