Активация Batch только на одном экземпляре сервера

голоса
0

У меня есть Nginx loadbalancer перед двух экземпляров TOMCAT каждые содержит приложение пружинных загрузок. Каждое приложение весны загрузки выполняет партию, которая записывает данные в базе данных. Партия выполняет каждый день в 1am. Проблема заключается в том, что оба экземпляра выполнить серию Simultaniously, которые я не хочу.

Есть ли способ сохранить batchs развернутый в двух случаях и сказать или Nginx кота, чтобы начать партию в главном сервере (и подчиненный сервере не запускается партии).

Если один из серверов останавливается, второй сервер может начать партию от его имени.

Есть инструмент в Nginx или коте (или какая-либо другая технология), чтобы сделать это?

заранее спасибо.

Задан 13/02/2020 в 22:02
источник пользователем
На других языках...                            


2 ответов

голоса
0

Spring Batch использует базу данных для своих рабочих мест (JobsRepository). По умолчанию в памяти источника данных используется для отслеживания запущенных заданий и их статус. В вашей установке, 2 экземпляры (скорее всего), используя свои собственные базы данных памяти. Несколько экземпляров Spring Batch может координировать друг с другом, как кластер и один может выполнять задания, в то время как другая резервная actasa, если jobsRepository база данных является общим. Для этого вам нужно настроить 2 экземпляра использовать общий источник данных.

Вот некоторые документы: https://docs.spring.io/spring-batch/docs/current/reference/html/index-single.html#jobrepository

https://docs.spring.io/spring-batch/docs/current/reference/html/job.html#configuringJobRepository

Ответил 14/02/2020 в 01:00
источник пользователем

голоса
0

Если вы разрабатываете два экземпляра приложения сервера для запуска той же работы , в то же время, то по дизайну, один удастся создать экземпляр задания , а другие не сможет (и этот отказ можно пренебречь). См Javadoc из JobRepository . Это одна из ролей в хранилище заданий: действовать в качестве защиты от повторяющихся расстрелов рабочих мест в кластерной среде.

Если один из серверов останавливается, второй сервер может начать партию от его имени. Есть инструмент в Nginx или коте (или какая-либо другая технология), чтобы сделать это?

Я считаю, что нет необходимости для такого инструмента или технологии. Если один из серверов вниз в то время графика, другой будет в состоянии взять вещи снова и добиться успеха в запуске задания.

Ответил 24/02/2020 в 13:40
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more