База данных, вызывающая главную нить с фиксированной задержкой - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть мастер-поток и дочерний поток, где мастер-поток используется для создания пула потоков для потомков и базы данных основного потока для каждого фиксированного времени в 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) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...