如何在 Eclipse MicroProfile 中添加计时器服务

VWe*_*ber 1 websphere-liberty payara payara-micro microprofile jakarta-ee

在 Java EE 中,我使用 EJB 计时器服务来安排任务:

@Stateless
public class TestSchedule {

    @Schedule(second = "*/30", minute = "*", hour = "*")
    public void processFiles() {

    }
}
Run Code Online (Sandbox Code Playgroud)

由于 Eclipse Micro Profile 不支持这种方法...实现这一点的常用方法是怎样的?

And*_*ert 5

使用 EJB 定时器

如果您使用的是 WebSphere Liberty 或 OpenLiberty,您只需ejbLite-3.2在 server.xml 中启用该功能即可引入 EJB Lite 功能(包括非持久性 EJB 计时器):

<featureManager>
  <feature>ejbLite-3.2</feature>
</feature>
Run Code Online (Sandbox Code Playgroud)

如果您需要持久EJB 计时器,您可以启用完整ejb-3.2功能。

请注意,您在原始问题中发布的代码来自 JavaEE,而不是 MicroProfile,但 Liberty 服务器确实支持在同一服务器中同时使用 JavaEE 和 MicroProfile 技术。


使用 Java EE 并发

非持久 EJB 计时器的另一个更现代/轻量级的替代方案是 JavaEE 并发实用程序。这可以通过 server.xml 中的功能来启用concurrent-1.0

<featureManager>
  <feature>concurrent-1.0</feature>
</featureManager>
Run Code Online (Sandbox Code Playgroud)

要使用它,您可以像这样提交一个CallableRunnable对象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);
}
Run Code Online (Sandbox Code Playgroud)

如果您刚刚开始编写此应用程序,我建议您使用 Java EE 并发实用程序而不是 EJB 计时器,因为 EE 并发更加轻量级,并且 MicroProfile 目前正在寻求将类似的功能与MicroProfile 并发项目合并。但是,如果您需要使用持久性任务,那么请使用 EJB 计时器。