如何在 Eclipse MicroProfile 中添加定时器服务
How to add a timer service in Eclipse MicroProfile
在 Java EE 中,我使用 EJB 计时器服务来安排任务:
@Stateless
public class TestSchedule {
@Schedule(second = "*/30", minute = "*", hour = "*")
public void processFiles() {
}
}
由于 Eclipse Micro Profile 不支持此方法...实现此方法的常用方法是什么?
好的,在 payara-micro 中找到了添加最少的解决方案:将 Java EE Web 依赖项添加到 maven 依赖项中。
使用 EJB 计时器
如果您使用的是 WebSphere Liberty 或 OpenLiberty,您只需在 server.xml 中启用 ejbLite-3.2
功能即可引入 EJB Lite 功能(包括非持久性 EJB 计时器):
<featureManager>
<feature>ejbLite-3.2</feature>
</feature>
如果您想要持久 EJB 计时器,您可以启用完整的ejb-3.2
功能。
请注意,您在原始问题中发布的代码来自 JavaEE,而非 MicroProfile,但 Liberty 服务器确实支持在同一服务器中同时使用 JavaEE 和 MicroProfile 技术。
使用 Java EE 并发
非持久性 EJB 计时器的另一个 modern/lightweight 替代方案是 JavaEE 并发实用程序。这可以通过 server.xml 中的 concurrent-1.0
功能启用:
<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 并发实用程序而不是 EJB 计时器,因为 EE 并发更轻量级,而 MicroProfile 目前正在寻求将类似的功能与 MicroProfile Concurrency project。但是,如果您需要使用 持久性 任务,请使用 EJB 计时器。
在 Java EE 中,我使用 EJB 计时器服务来安排任务:
@Stateless
public class TestSchedule {
@Schedule(second = "*/30", minute = "*", hour = "*")
public void processFiles() {
}
}
由于 Eclipse Micro Profile 不支持此方法...实现此方法的常用方法是什么?
好的,在 payara-micro 中找到了添加最少的解决方案:将 Java EE Web 依赖项添加到 maven 依赖项中。
使用 EJB 计时器
如果您使用的是 WebSphere Liberty 或 OpenLiberty,您只需在 server.xml 中启用 ejbLite-3.2
功能即可引入 EJB Lite 功能(包括非持久性 EJB 计时器):
<featureManager>
<feature>ejbLite-3.2</feature>
</feature>
如果您想要持久 EJB 计时器,您可以启用完整的ejb-3.2
功能。
请注意,您在原始问题中发布的代码来自 JavaEE,而非 MicroProfile,但 Liberty 服务器确实支持在同一服务器中同时使用 JavaEE 和 MicroProfile 技术。
使用 Java EE 并发
非持久性 EJB 计时器的另一个 modern/lightweight 替代方案是 JavaEE 并发实用程序。这可以通过 server.xml 中的 concurrent-1.0
功能启用:
<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 并发实用程序而不是 EJB 计时器,因为 EE 并发更轻量级,而 MicroProfile 目前正在寻求将类似的功能与 MicroProfile Concurrency project。但是,如果您需要使用 持久性 任务,请使用 EJB 计时器。