Как назначить задание quartz пользователю и категории?

#spring #database-design #scheduled-tasks #crud #quartz

#spring #база данных-дизайн #запланированные задачи #crud #quartz

Вопрос:

Я внедряю веб-приложение, используя spring boot и quartz, чтобы разрешить зарегистрированным пользователям планировать уведомления. Эти уведомления делятся на две категории: sms и email. Я хотел бы предоставить возможность выбрать категорию sms или email, а затем перечислить все запланированные уведомления по категориям. Пользователь может редактировать уже запланированные уведомления, добавлять новые и удалять выбранные. Задача кажется очень простой, но я не знаю, как назначить задание пользователю и категории, поскольку при создании нового задания есть возможность идентифицировать задания только по идентификатору задания и имени группы. Смотрите следующий сокращенный код:

 private JobDetail createJob(ScheduleEmailDto scheduleEmailDto) {
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("email", scheduleEmailDto.getEmail());
        jobDataMap.put("subject", scheduleEmailDto.getSubject());
        jobDataMap.put("body", scheduleEmailDto.getBody());

        Integer userId = scheduleEmailDto.getUserId();
        Integer categoryId = scheduleEmailDto.getCategoryId();   

        JobDetail newJob = JobBuilder.newJob(EmailJob.class)
                .withIdentity(UUID.randomUUID().toString(), "group")
                .usingJobData(jobDataMap)
                .storeDurably()
                .build();
        return newJob;
    }
  

Кто-нибудь может указать мне, как я могу назначить вновь созданное задание пользователю и категории? Все предложения были бы очень полезны.

Ответ №1:

Если вы еще этого не сделали, вы можете настроить a JDBCJobStore , Который позволяет сохранять job_details, триггеры и т. Д. В нескольких таблицах базы данных и обрабатывать их из БД.

Смотрите http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/tutorial-lesson-09.html для получения более подробной информации.

На этом этапе вам может быть легко создать дополнительную таблицу, которая может связать пользователя и категорию с заданиями и управлять ими через DB.

Комментарии:

1. Спасибо. Это действительно полезно. Чтобы быть точным, вы имеете в виду создать новое задание с помощью JobBuilder, которое сохранит вновь созданное задание в базе данных, а затем я должен получить JobKey и сохранить ключ в моей пользовательской таблице базы данных с соответствующим идентификатором пользователя и идентификатором категории? Затем, когда я хочу перечислить задания конкретного пользователя по категориям, я должен создать инструкцию sql для извлечения ключей заданий из моей пользовательской таблицы? В конце я могу извлекать задания из базы данных, используя планировщик quartz и ключ задания?

2. В принципе, ДА, вы можете работать таким образом. Извините за то, что я слишком синтетичен, но я на работе …