#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. В принципе, ДА, вы можете работать таким образом. Извините за то, что я слишком синтетичен, но я на работе …