我有以下设置:
@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时将由容器实例化它。