У меня есть мастер-поток и дочерний поток, где мастер-поток используется для создания пула потоков для потомков и базы данных основного потока для каждого фиксированного времени в ScheduledThreadPool Executor.Моя задача состоит в том, чтобы предотвратить опрос базы данных Master Thread для каждой следующей задержки.Как этого добиться, чтобы Мастер не опрашивал БД каждые 5 минут, что является фиксированным временем задержки
Это должно работать так: Опрашивать БД только один раз, чтобы получить список активных процессов.Для каждой запланированной фиксированной задержки дочерние потоки должны выполняться без повторного опроса БД
@ Scheduled (fixedDelayString = 30000)
public void processServices() {
try {
logger.debug("Entering processServices in MasterProcessThread ");
// Getting process details and schedule
List<ProcessDomain> activeProcessList = processDomainDao.getActiveProcessDomainSchedule();
logger.info("getDomainData for flag is Active :: " + activeProcessList.size());
// Iterating over active processList to create child threads
for (ProcessDomain activeProcessDomain : activeProcessList) {
Timestamp nextRunTS = activeProcessDomain.getProcessSchedule().getProcessNextRunScheduleTime();
Long nextRunTime = (nextRunTS != null ? nextRunTS.getTime() : null);
Long startTS = activeProcessDomain.getProcessSchedule().getProcessScheduleTime().getTime();
Long currentTS = System.currentTimeMillis();
boolean isPreviousRunSucc = (activeProcessDomain.getProcessRunHistory().getPreviousSuccFlag() != null
&& activeProcessDomain.getProcessRunHistory().getPreviousSuccFlag().equals("Y")) ? true : false;
Future future = null;
// Initializing the child threads and start processing
if (((nextRunTime == null && currentTS >= startTS) || (nextRunTime != null && currentTS >= nextRunTime))
&& isPreviousRunSucc) {
Callable task = beanServiceThreadFactory.getBeanThread(activeProcessDomain.getProcessName(),
activeProcessDomain);
future = stp.submit(task);
if (future.isDone()){
stp.shutdown();
}
}
}
} catch (Exception e) {