我将业务方法和预定方法分开。
以下代码有哪些可能的优点
@Singleton
@Startup
public class MySchedule {
@Schedule(...)
public void doSome() {
}
}
以下代码?
@Stateless
public class MySchedule {
@Schedule(...)
public void doSome() {
}
}
我阅读了@Singleton
和@Startup
的定义。但我看到仅使用@Stateless
注释的类的方法也按计划工作。
有任何差异或偏好吗?
答案 0 :(得分:0)
这取决于容器实现(和EJB规范)。
@Stateless将按原样行事,你不应该有一个州! 为每个调度调用该方法,Wildfly将阻止并发调用,如果定时器仍在运行(即1分钟的调度和执行需要更多),将跳过带有WARN消息的调度
@Singleton可能会保持状态(即开始初始化)和预定事件期间。 根据规范,您不能同时调用此实例,直到您添加Lock.READ,这意味着只要调度程序运行您就无法调用任何其他方法。 对于相同的并发计划,无论如何都是不可能的(见上文) 这也意味着你也不能同时运行两个@Schedule方法。
我不确定其他容器是否允许同步执行计时器。
如果您有一个单独的计划(并且在实施中没有其他任何内容),那么它应该没有什么区别。 并且@Startup也没有多大意义;)