Hoe contextinformatie te verspreiden Gooi Spring Batch

Invoering

Bij het ontwikkelen van applicaties met Spring-batch, vooral in een microserviceproject, worden we soms geconfronteerd met een of de meeste van de volgende gevallen:

  • De noodzaak om de beveiligingscontext binnen de batchitems te krijgen om methoden aan te roepen die autorisaties vereisen binnen dezelfde microservice of om externe verwerking uit te voeren door andere microservices aan te roepen met Feign Client (HTTP) of Spring Cloud Stream (makelaar zoals Kafka, RabbitMq. ..)
  • Propagerende Sleuth-trace-id en span-id om de traceerbaarheid van logboeken in alle toepassingscomponenten, inclusief andere microservices, te verbeteren, zodat de trace niet verloren gaat als we Job gebruiken.
  • De landinstelling van de verbonden gebruiker (i18n) krijgen om geïnternationaliseerde uitvoer te genereren, anders worden alle taakuitvoer in de standaard servertaal gegenereerd.
  • Ophalen van objecten die zijn opgeslagen in Mapped Diagnostic Context (MDC) voor opsporingsdoeleinden.

Het volgende schema illustreert externe oproepen die kunnen worden uitgevoerd in een op microservices gebaseerde toepassing en de contextinformatie die String Batch-items kunnen doorgeven.

De hierboven beschreven gevallen kunnen worden opgelost door de contextinformatie door te geven als taakparameters en deze te herstellen voordat de taak of stap wordt uitgevoerd met JobExecutionListener of StepExecutionListener, respectievelijk volgens de gemaakte uitvoeringsconfiguratie (één thread per taak of threadpool die).

Het probleem met deze benadering is dat de code die verantwoordelijk is voor de injectie van taakparameters bij het bedrijf verschijnt, wat verwarring kan veroorzaken tijdens het onderhoud van de code. Ook deze verwerking moet transparant zijn voor de ontwikkelaars, zodat ze zich meer kunnen concentreren op de bedrijfslogica. Daarom wil ik een nieuw raamwerk introduceren dat kan worden gebruikt om de hierboven beschreven contexten te verspreiden met de mogelijkheid om eenvoudig andere informatie toe te voegen.

Hoe het werkt

Het volgende diagram beschrijft globaal hoe dit raamwerk werkt:

  1. Een aspect dat de oproep van JobLauncher.run() methode om de contextinformatie in te voegen als een jobparameter.
  2. Een op maat gemaakt JobExecutionListener wordt aangeroepen door Spring Batch vóór het begin van de taak om de contextparameters te deserialiseren en in de ExecutionContext.
  3. Een op maat gemaakt StepExecutionListener wordt aangeroepen door Spring Batch vóór het begin van de stap om de context te herstellen en te wissen en het einde van de stap.

De Job JobExecutionListener en StepExecutionListener worden automatisch ingevoegd door het framework.

De baan JobExecutionListener en StepExecutionListener worden door het raamwerk automatisch geïnjecteerd en geassocieerd met elke taak. Dus geen extra code nodig.

Hoe te gebruiken

Het is heel simpel; aangezien het framework is voorzien van starters, voegt u eenvoudig de afhankelijkheid toe die overeenkomt met de benodigde context.

Voor Spring Security:

Voor Sleuth:

Voor MDC:

Voor locale (i18n):

Geavanceerd gebruik

Om een ​​aangepaste context te verspreiden, moet de ontwikkelaar de interface implementeren JobExecutionContextListener en injecteer het als een lenteboon. De nieuwe boon wordt automatisch door het raamwerk in aanmerking genomen.

De framework-broncode is gepubliceerd in github

CreditSource link

We will be happy to hear your thoughts

Leave a reply

Pan-Belgium
Logo
Compare items
  • Total (0)
Compare
0
Shopping cart