使用@Schedule服务,@ Startup @ Singleton优于@Stateless的优点是什么?

时间:2016-07-29 09:38:55

标签: timer singleton ejb startup

我将业务方法和预定方法分开。

以下代码有哪些可能的优点

@Singleton
@Startup
public class MySchedule {

    @Schedule(...)
    public void doSome() {
    }
}

以下代码?

@Stateless
public class MySchedule {

    @Schedule(...)
    public void doSome() {
    }
}

我阅读了@Singleton@Startup的定义。但我看到仅使用@Stateless注释的类的方法也按计划工作。

有任何差异或偏好吗?

1 个答案:

答案 0 :(得分:0)

这取决于容器实现(和EJB规范)。

@Stateless将按原样行事,你不应该有一个州! 为每个调度调用该方法,Wildfly将阻止并发调用,如果定时器仍在运行(即1分钟的调度和执行需要更多),将跳过带有WARN消息的调度

@Singleton可能会保持状态(即开始初始化)和预定事件期间。 根据规范,您不能同时调用此实例,直到您添加Lock.READ,这意味着只要调度程序运行您就无法调用任何其他方法。 对于相同的并发计划,无论如何都是不可能的(见上文) 这也意味着你也不能同时运行两个@Schedule方法。

我不确定其他容器是否允许同步执行计时器。

如果您有一个单独的计划(并且在实施中没有其他任何内容),那么它应该没有什么区别。 并且@Startup也没有多大意义;)