【发布时间】:2015-07-08 11:38:29
【问题描述】:
我有以下设置:
@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注释需要它
如何将无状态注入单例?
【问题讨论】:
-
为什么你有一个预定的单例课程?这样的设计有原因吗?
-
@BuhakeSindi 我需要定期对数据库执行同步和清理任务。
-
是定时器还是启动单例?启动用于初始化,定时器用于调度,为什么要一起使用?
-
@maja 我明白,但为什么要使用
@SingletonBean? -
定时器服务可以是
@Stateless或@Stateful会话 bean,您可以在任何 EJB 中使用@PostConstruct。
标签: java jakarta-ee ejb