WedX - журнал о программировании и компьютерных науках

Привязка двух разных TaskSchedulers к приложению Spring Boot

У меня следующая проблема: в моем приложении есть несколько аннотаций @Scheduled, определяющих задания cron, которые могут выполняться одновременно. Насколько я понял, стандартное поведение заключается в том, что каждое задание cron выполняется одним однопоточным TaskScheduler, так что одновременно может выполняться только одно задание cron, а все остальные задания ставятся в очередь. Это было бы моим желаемым поведением, но я испытываю то, что задания выполняются параллельно.

После долгих поисков я обнаружил, что класс, лежащий в основе проверки работоспособности, определяет TaskScheduler с несколькими потоками.

Зная это, я хотел бы сохранить библиотеку Healthcheck, используя ее многопоточную TaskScheduler, и определить еще одну TaskScheduler, которая является однопоточной и используется моей аннотацией @Scheduled.

Я могу определить Bean, который использует однопоточный планировщик:

@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
  ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
  threadPoolTaskScheduler.setPoolSize(THREADS_COUNT);
  return threadPoolTaskScheduler;
}      

Но как можно привязать этот планировщик только к моим @Scheduled аннотациям?


  • Кажется, это невозможно с аннотацией @Scheduled: github.com/spring-projects /spring-framework/issues/18792. Вы можете определить свои задачи в Java Config и запланировать их на правильный TaskScheduler самостоятельно. 13.08.2019

Ответы:


1

Можно просто позволить методам, аннотированным @Scheduled, вызывать методы, аннотированные @Async("singleThreadScheduledExecutor"). «multipleThreadScheduledExecutor» может работать параллельно с асинхронными методами, а асинхронные методы ставятся в очередь в LinkedBlockingQueue, когда соответствующие задания cron перекрываются во времени. Две другие вещи важны, чтобы заставить его работать:

  1. самовызов — вызов асинхронного метода из того же класса — не будет работать
  2. асинхронные методы должны быть общедоступными

Это необходимо, поэтому Spring может создать прокси вокруг методов.

10.01.2020
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]