我有以下设置:

@Singleton
@Startup
@DependsOn(value="DataSourceHandler")
public class TimerTask {

    @EJB(name = "DataSourceHandler")
    DataSourceHandler dataSourceHandler;
}

@Stateless(name = "DataSourceHandler")
public class DataSourceHandler {
    ... database operations
}


timertask每30分钟运行一次,并在DataSourceHandler EJB的帮助下执行数据库操作。

这里的问题是我无法将EJB注入Singleton Timertask中,因为单例只能依赖于其他单例。但是,other questions中提出的解决方案对我不起作用:


我不能将DataSourceHandler设置为Singleton,因为它也用在应用程序的其他部分中,而不是多线程保存。
我无法从TimerTask中删除​​Singleton,因为@Startup批注需要它


如何将无状态注入单例?

最佳答案

您无需在此处进行dependOn注释。
@dependson用于以下情况:


  用于表示单例之间的初始化依赖关系
  组件。


由于DataSourceHandler是EJB,因此在您单例注入该EJB时将由容器实例化它。

10-08 18:08