Timer 这种方法可能有哪些优点@Startup@Singleton在@Stateless上使用@Schedule服务?

Timer 这种方法可能有哪些优点@Startup@Singleton在@Stateless上使用@Schedule服务?,timer,singleton,ejb,startup,Timer,Singleton,Ejb,Startup,我正在分离我的业务方法和计划方法 以下代码可能有哪些优点 @Singleton @Startup public class MySchedule { @Schedule(...) public void doSome() { } } 超过以下代码 @Stateless public class MySchedule { @Schedule(...) public void doSome() { } } 我阅读了@Singleton和@Sta

我正在分离我的业务方法和计划方法

以下代码可能有哪些优点

@Singleton
@Startup
public class MySchedule {

    @Schedule(...)
    public void doSome() {
    }
}
超过以下代码

@Stateless
public class MySchedule {

    @Schedule(...)
    public void doSome() {
    }
}
我阅读了
@Singleton
@Startup
的定义。但是我看到仅用
@Stateless
注释的类的方法也按计划工作


是否存在任何差异或首选项?

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

@Stateless将按原样运行,您不应该在其中有状态! 为每个计划调用该方法,Wildfly将阻止并发调用,如果计时器仍在运行,则将跳过该计划并显示警告消息(即1分钟计划,执行时间更长)

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

我不确定其他容器是否允许计时器并发执行

如果您有一个单独的计划(并且在实现中没有其他计划),那么它应该不会有什么不同。
那么@Startup也就没有什么意义了;)

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

@Stateless将按原样运行,您不应该在其中有状态! 为每个计划调用该方法,Wildfly将阻止并发调用,如果计时器仍在运行,则将跳过该计划并显示警告消息(即1分钟计划,执行时间更长)

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

我不确定其他容器是否允许计时器并发执行

如果您有一个单独的计划(并且在实现中没有其他计划),那么它应该不会有什么不同。 那么@Startup也就没有什么意义了;)