Отслеживание количества событий в приложении весной и запуск записи в БД - PullRequest
0 голосов
/ 01 октября 2018

У меня есть следующий @Component, который имеет list of reportSchedules...

Они переведены в ReportTask готовый к запуску и запланированы к выполнению через некоторое время в будущем ..

@Component
public class RegisterReportSchedules implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private ThreadPoolTaskScheduler ts;

    private List<String> reportSchedules; //contains list of report schedules

    @Autowired
    private SomeTask sometask;

    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;


    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {

                reportSchedules.forEach((String schedule) -> {
                    ReportSchedule reportSchedule = new ReportSchedule(schedule,
                            propertiesUtil.getProperty(schedule + "." + Constants.CRON));

                        ts.schedule(new ReportTask(reportSchedule),
                                new CronTrigger(reportSchedule.getCronExpression()));
                    });

        }


        class ReportTask implements Runnable {

        private ReportSchedule schedule;

        public ReportTask(ReportSchedule schedule) {
            this.schedule = schedule;
        }

        @Override
        public void run() {
            sometask.process(schedule);
            applicationEventPublisher.publishEvent(new ReportScheduleProcessedEvent(this, schedule.getSchedule()));
        }
    }

}

Каждый раз, когда обрабатывается ReportTask, я хочу опубликовать событие и присоединить к нему слушателя.

public class ReportScheduleProcessedEvent extends ApplicationEvent {

    private String schedule;

    public ReportScheduleProcessedEvent(Object source, String schedule) {
        super(source);
        this.schedule = schedule;
    }

    public String getSchedule() {
        return schedule;
    }
}

Это слушатель:

@Component
public class ReportScheduledProcessedListener implements ApplicationListener<ReportScheduleProcessedEvent> {


    @Override
    public void onApplicationEvent(ReportScheduleProcessedEvent reportScheduleProcessedEvent) {
     //receive events, count how many received against initial list and then initiate database write..
    }
}

когда все reportSchedules обработаны, я хочу записать событие в таблицу базы данных.Итак, в операции onApplicationEvent() как я могу определить, что все мои reportSchedules были обработаны, а затем вызвать функцию, готовую записать запись в таблицу?

Где я могу отслеживать количество выполненных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...