Batch Attiva su una sola istanza del server

voti
0

Ho una loadbalancer nginx davanti due istanze tomcat ciascuno contiene un'applicazione di avvio molla. Ogni applicazione di avvio primavera esegue un batch che scrive i dati in un database. Il batch viene eseguito ogni giorno alle 01:00. Il problema è che entrambe le istanze eseguire il batch simultaniously che non voglio.

C'è un modo per mantenere i batchs schierati in due casi e dire Tomcat o nginx per avviare il lotto in server master (e il server slave non eseguire il batch).

Se uno dei server si ferma, il secondo server potrebbe iniziare la partita a suo nome.

C'è uno strumento in nginx o Tomcat (o qualche altra tecnologia) per fare che?

Grazie in anticipo.

È pubblicato 13/02/2020 alle 22:02
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

Batch Spring usa un database per i suoi lavori (JobsRepository). Per impostazione predefinita, un DataSource in memoria viene utilizzata per tenere traccia dei processi in esecuzione e il loro stato. Nella configurazione, i 2 istanze sono (più probabile) utilizzando la propria in-memory database. Più istanze di Primavera batch in grado di coordinare tra loro come un gruppo e si può eseguire i lavori, mentre l'altro di backup actasa, se il database jobsRepository è condiviso. Per questo è necessario per configurare le 2 istanze di utilizzare un DataSource comune.

Qui ci sono alcuni documenti: 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

Risposto il 14/02/2020 a 01:00
fonte dall'utente

voti
0

Se si progetta due istanze del server applicazione per eseguire lo stesso lavoro, allo stesso tempo, poi in base alla progettazione, ci si riuscirà a creare un'istanza di lavoro e l'altro avrà esito negativo (e questo fallimento può essere ignorato). Vedere Javadoc di JobRepository . Questo è uno dei ruoli del repository di lavoro: di agire come una salvaguardia contro le esecuzioni di lavoro duplicati in un ambiente cluster.

Se uno dei server si ferma, il secondo server potrebbe iniziare la partita a suo nome. C'è uno strumento in nginx o Tomcat (o qualche altra tecnologia) per fare che?

Credo che non v'è alcuna necessità di tale strumento o la tecnologia. Se uno dei server è giù al momento della pianificazione, l'altro sarà in grado di prendere le cose e avere successo nel lancio del lavoro.

Risposto il 24/02/2020 a 13:40
fonte dall'utente

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