Преимущество Spring Scheduler в использовании выражения cron по сравнению с фиксированной задержкой - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть метод в проекте Java8, использующий аннотацию Spring @Scheduled для запуска с фиксированной задержкой и вызова метода удаления.

Есть ли преимущество в производительности или стабильности системы при использовании выражения cron, а не строки задержки?

Добавление текущей реализации ниже:

@Scheduled(fixedDelayString = "${cleanup.unused.files.frequency}")
public void deleteUnusedFiles() throws IOException {
    LOGGER.info("Unused data files deletion started");
    recursiveDeleteFilesOlderThanNDays(unusedFileAgeThreshold, unusedFilesPath);
    LOGGER.info("Unused data files deletion completed");
}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Это может повлиять на стабильность вашей системы.Подумайте о ситуации, когда у вас есть 3 разных (просто несколько) экземпляра вашего приложения, где у вас также есть аннотация @Scheduled.И если вы развернули на 3 разных серверах, которые расположены в значительно разных географических точках (например, один сервер в США, один в Сингапуре и один в другом месте), если запланированное задание выполняется в разное время, может быть возможностьдублирования работы и возможных сценариев ошибок, а также.(это зависит от вашей логики планировщика).Но когда дело доходит до Crons, вы можете определить точный вид часового пояса для запуска задания, что означает, что независимо от того, в какой стране работает ваш экземпляр, задание будет выполняться в каждом экземпляре в уникальное время.И более того, если вы думаете о кронах в Kubernetes, в идеале он поддерживает только один экземпляр для выполнения работы, а в случае неудачи только Kubernetes создаст для вас другой экземпляр планировщика.Так что есть разница, но все же вы можете принять решение, основываясь на том, что вы действительно делаете внутри планировщика.

0 голосов
/ 23 ноября 2018

Cron expression и fixedDelay предназначены для предоставления настраиваемых параметров планирования и не влияют на производительность как таковую.Повышение производительности метода deleteUnusedFiles - это единственный вариант, который может существенно повлиять на производительность вашего приложения.Я бы предпочел fixedDelay, а не cron, если смогу добиться того, что хочу, используя fixedDelay.

...