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

时间:2018-11-17 16:06:18

标签: java-ee websphere-liberty payara payara-micro microprofile

在Java EE中,我使用EJB Timer Service安排了任务:

@Stateless
public class TestSchedule {

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

    }
}

由于Eclipse Micro Profile中不支持此方法,因此通常的实现方式是什么?

2 个答案:

答案 0 :(得分:2)

使用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并发

JavaEE并发实用程序是非持久EJB计时器的另一种更现代/更轻巧的替代方案。可以使用server.xml中的concurrent-1.0功能启用此功能:

<featureManager>
  <feature>concurrent-1.0</feature>
</featureManager>

要使用它,可以像这样向Callable提交RunnableManagedScheduledExecutorService对象:

@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);
}

如果您刚开始编写此应用程序,由于EE并发功能更轻巧,并且MicroProfile当前正在寻求将类似功能与MicroProfile Concurrency project结合使用,因此建议您通过EJB计时器使用Java EE并发实用程序。但是,如果您需要使用 persistent 任务,请使用EJB计时器。

答案 1 :(得分:0)

好吧,发现该解决方案至少在payara-micro上添加了:将Java EE Web依赖项添加到maven依赖项中。