【发布时间】:2018-05-28 07:19:41
【问题描述】:
我在 web.xml 中设置了 2 个服务,并为每个服务创建了一个 shedule 服务,如下所示:
public class MyScheduler implements ServletContextListener {
private ScheduledExecutorService scheduledExecutorService = null;
@Override
public void contextInitialized(ServletContextEvent sce) {
if ((scheduledExecutorService == null) || (!scheduledExecutorService.isTerminated())) {
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleAtFixedRate(new MyScheduledTimer(), 0, 15, TimeUnit.DAYS);
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
try {
scheduledExecutorService.shutdown();
} catch (Exception ex) {
}
}
}
class MyScheduledTimer extends TimerTask {
{
try {
MyEjb ejbObject = (InterfaceEjb) new InitialContext().lookup("java:global/project/MyEjb");
} catch (NamingException ex) {
Logger.getLogger(MyScheduler.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(MyScheduler.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run() {
//my code to run with ejbObject...
}
}
我想运行第一个服务来启动我的应用程序,等待该服务完成,然后运行第二个服务。可以吗?
【问题讨论】:
-
是的,你可以做到。如果您的第一个服务完成,请保留一个布尔标志并返回 true。然后在 run 方法中调用第二个服务之前检查该标志。
-
好的,我曾考虑过这个解决方案,但我相信 ScheduledExecutorService 类有一些特性可以实现这一点。非常感谢
标签: java timer scheduledexecutorservice