День добрый. Возникла необходимость создания планировщика заданий. Почитав интернет везде рекомендует использовать Quartz. Но я не со всем понимаю как создать то что мне надо: У меня есть база данных с днями рождениями клиентов. Суть в том что на 1 число текущего месяца необходимо сформировать список клиентов с др, у каждого клиента есть столбец GIFT. Его суть в том, что на дни рождения в этот столбец будет начисляться бонусные баллы. Так вот необходимость состоит в том что. Нужно создавать н-количество задач которые будут начислять эти бонусы. То есть в задачу надо передавать id_cliet и sum_gift. Причем каждую задачу надо выполнить строго за день до его дня рождения. А затем спустя день после его дня рождения выполнить вторую, которая удалит бонусы если они не были использованы.
Для этих целей не плохо подошел этот код. Но есть нюанс, я не понимаю как в него передать нужные мне значения для аппдейтов. И привязать его к дате выполнения.
public class QuartzJob implements Job {
public QuartzJob(){
}
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println(jobExecutionContext.getTrigger());
}
}
JobDetail job = JobBuilder
.newJob(QuartzJob.class)
.withIdentity("QuartzJob", "group1")
.build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("QuartzTrigger", "group1")
.withSchedule(CronScheduleBuilder
.cronSchedule("0 48 9-18/1 ? * MON,TUE,WED"))
.build();
SchedulerFactory schedFact = new StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();
sched.scheduleJob(job,trigger);
Всем кто откликнется спасибо!
Логика не та. Вам не нужно плодить кучу заданий. Достаточно одной задачи, которая будет обращаться прямо в момент выполнения в бд, брать всех юзеров и проходится по ним делая то что Вам нужно. Запускать можно, допустим в конце дня, то бишь в полночь. Ну в момент выполнения вы уже смотрите если дата рождения юзера совпадает со следующим днем то начисляете бонусы, если же дата рождения после списываете бонусы.
public class CronUsers implements Job {
@Override
public void execute(JobExecutionContext ctx) throws JobExecutionException {
// Определяем текущую дату. Можно заодно предыдущую и следующую.
Calendar C = Calendar.getInstance();
Date current = C.getTime();// текущая
C.add(Calendar.DATE, -1); // минус один день
Date yesterday = C.getTime();
C.add(Calendar.Date, 2); // добавляем два дня (учитываем что отнимали в предыдущем действии один день.
Date tomorrow = C.getTime();
// Обращаетесь к бд. Получаете список пользователей
List<User> users = DataBase.getUsers();
users.stream().forEach(user=>{
Date birthday = user.getBirthDay(); // преобразуем строку с датой рождения в объект Date. Можно воспользоваться SimpleDateFormat.
// Делаем проверки на даты и пишем в базу
});
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Тестирую метод 1В методе 1 есть статический вызов метода 2 на объекте другого класса
Как протестировать работу кнопок с помощью Espresso,когда они создаются программно и их не запустить с помощью resource idC помощью classname так же не проверить...
Проблемы с пониманием работы ArrayDeque, а именно с заданием размерности
Хочу спроситьКакие технологии используются для создания анимированных персонажей на платформа Android и/или iOS