Вот код, который у меня есть в настоящее время, и который используется для изменения расписания действий. Работает нормально: D. Это в основном перенесет действие на 24 часа раньше текущего времени.

Я хотел бы иметь повторяющиеся действия (например, возможность переносить мероприятие каждый день) и, если возможно, до установленной даты.

Есть ли у кого-нибудь совет?

@Override
public void rescheduleActivity(int id) {

    Activity activity = activityRepositoryJPA.findById(id);

    LocalDateTime date = LocalDateTime.now();
    Timestamp newDate = Timestamp.valueOf(date.plus(24, ChronoUnit.HOURS));

    activity.setStartDateTime(newDate);
    activityRepositoryJPA.saveAndFlush(activity);

}
0
Kabira Suleman 31 Дек 2017 в 18:52

2 ответа

Лучший ответ

Я считаю, что вы используете Spring Boot. С помощью Spring Boot вы можете включить планирование, просто добавив аннотацию @EnableScheduling к основному классу приложения или любому другому классу конфигурации.

Вы можете запланировать задачи с помощью аннотации @Scheduled. Например;

@Scheduled(fixedRate = 2000)
 public void scheduleTaskWithFixedRate() {
   // ...
}

@Scheduled(fixedDelay = 2000)
 public void scheduleTaskWithFixedDelay() {
   // ...
}

@Scheduled(fixedRate = 2000, initialDelay = 5000)
 public void scheduleTaskWithFixedRateAndInitialDelay() {
   // ...
}

@Scheduled(cron = "0 * * * * ?")
public void scheduleTaskWithCronExpression() {
  // ...
}

У вас есть такая гибкость, чтобы планировать задачи периодически или повторно в соответствии с вашими потребностями.

1
fabfas 31 Дек 2017 в 16:29

Насколько я понимаю, вы пытаетесь сделать это более общим. Тогда лучшим вариантом было бы добавить еще один параметр как Timestamp, который имеет новый Timestamp для вашего действия.

public void rescheduleActivity(int id, Timestamp newDate) {

    Activity activity = activityRepositoryJPA.findById(id);

    LocalDateTime date = LocalDateTime.now();

    activity.setStartDateTime(newDate);
    activityRepositoryJPA.saveAndFlush(activity);

}

Тогда назовите это

Timestamp newDate = Timestamp.valueOf(date.plus(24, ChronoUnit.HOURS));
rescheduleActivity (5,newDate);
1
Ravi 31 Дек 2017 в 16:02