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 不支持这种方法...实现这一点的常用方法是怎样的?
使用 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)
要使用它,您可以像这样提交一个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);
}
Run Code Online (Sandbox Code Playgroud)
如果您刚刚开始编写此应用程序,我建议您使用 Java EE 并发实用程序而不是 EJB 计时器,因为 EE 并发更加轻量级,并且 MicroProfile 目前正在寻求将类似的功能与MicroProfile 并发项目合并。但是,如果您需要使用持久性任务,那么请使用 EJB 计时器。
| 归档时间: |
|
| 查看次数: |
1408 次 |
| 最近记录: |