Úvod do úlohy Spring Cloud

1. Prehľad

Cieľom úlohy Spring Cloud Task je poskytnúť funkčnosť vytvárania krátkodobých mikroslužieb pre aplikáciu Spring Boot.

V Spring Cloud Task máme flexibilitu dynamického spustenia akejkoľvek úlohy, alokácie zdrojov na požiadanie a načítania výsledkov po dokončení úlohy.

Tasks je nový primitív v rámci Spring Cloud Data Flow, ktorý umožňuje používateľom vykonávať prakticky akúkoľvek aplikáciu Spring Boot ako krátkodobú úlohu.

2. Vývoj aplikácie pre jednoduché úlohy

2.1. Pridanie relevantných závislostí

Na začiatok môžeme pridať sekciu správy závislostí pomocou Závislosti jarných cloudových úloh:

   org.springframework.cloud spring-cloud-task-dependencies 2.2.3.RELEASE import pom 

Táto správa závislostí spravuje verzie závislostí prostredníctvom rozsahu importu.

Musíme pridať nasledujúce závislosti:

 org.springframework.cloud spring-cloud-starter-task org.springframework.cloud spring-cloud-task-core 

Toto je odkaz na Maven Central mesta jar-cloud-task-core.

Teraz potrebujeme, aby sme mohli spustiť našu aplikáciu Spring Boot štartér s pružinou s príslušným rodičom.

Budeme používať Spring Data JPA ako nástroj ORM, takže musíme pridať aj závislosť:

 org.springframework.boot spring-boot-starter-data-jpa 2.2.6.RELEASE 

Podrobnosti o bootstrapovaní jednoduchej aplikácie Spring Boot s Spring Data JPA sú k dispozícii tu.

Môžeme skontrolovať najnovšiu verziu pružina-štartér-štartér-rodič on Maven Central.

2.2. The @EnableTask Anotácia

Ak chcete zaviesť funkčnosť úlohy Spring Cloud Task, musíme pridať @EnableTask anotácia:

@SpringBootApplication @EnableTask verejná trieda TaskDemo {// ...} 

Anotácia prináša SimpleTaskConfiguration trieda na obrázku, ktorá naopak registruje Úložisko úloh a jeho infraštruktúra. V predvolenom nastavení sa na ukladanie stavu súboru používa mapa v pamäti Úložisko úloh.

Základné informácie o Úložisko úloh je modelované v Vykonanie úlohy trieda. Znamenané polia tejto triedy sú taskName, Doba spustenia, endTime, exitMessage. The exitMessage ukladá dostupné informácie v čase výstupu.

Ak je ukončenie spôsobené poruchou v každom prípade aplikácie, tu sa uloží úplné sledovanie zásobníka výnimiek.

Spring Boot poskytuje rozhranie ExitCodeExceptionMapper ktorý mapuje nezachytené výnimky na výstupné kódy a umožňuje podrobné ladenie. Cloudová úloha ukladá informácie v zdroji údajov pre budúcu analýzu.

2.3. Konfigurácia a Dátový zdroj pre Úložisko úloh

Mapa v pamäti na uloženie Úložisko úloh zmizne po dokončení úlohy a stratíme údaje súvisiace s udalosťami úlohy. Na ukladanie v trvalom úložisku použijeme MySQL ako zdroj údajov s Spring Data JPA.

Zdroj údajov je nakonfigurovaný v aplikácia.yml spis. Konfigurácia úlohy Spring Cloud na použitie poskytnutého zdroja údajov ako úložiska Úložisko úloh, musíme vytvoriť triedu, ktorá sa rozširuje DefaultTaskConfigurer.

Teraz môžeme odoslať nakonfigurované Dátový zdroj ako argument konštruktora konštruktoru nadtriedy:

@Autowired private DataSource dataSource; verejná trieda HelloWorldTaskConfigurer rozširuje DefaultTaskConfigurer {verejný HelloWorldTaskConfigurer (DataSource dataSource) {super (dataSource); }}

Ak chcete, aby bola vyššie uvedená konfigurácia v akcii, musíme anotovať inštanciu Dátový zdroj s @Autowired anotáciu a vložiť inštanciu ako argument konštruktora a HelloWorldTaskConfigurer fazuľa definovaná vyššie:

@Bean public HelloWorldTaskConfigurer getTaskConfigurer () {vrátiť nový HelloWorldTaskConfigurer (dataSource); }

Týmto je konfigurácia na uloženie dokončená Úložisko úloh do databázy MySQL.

2.4. Implementácia

Na jar Boot, môžeme vykonať ktorúkoľvek úlohu tesne predtým, ako aplikácia dokončí svoje spustenie. Môžeme použiť ApplicationRunner alebo CommandLineRunner rozhrania na vytvorenie jednoduchej úlohy.

Musíme implementovať bežať metódu týchto rozhraní a deklarovať implementačnú triedu ako fazuľa:

@Component public static class HelloWorldApplicationRunner implementuje ApplicationRunner {@Override public void run (ApplicationArguments arg0) vyvolá Exception {System.out.println ("Hello World from Spring Cloud Task!"); }}

Teraz, ak spustíme našu aplikáciu, mali by sme dostať našu úlohu, ktorá produkuje potrebný výstup s požadovanými tabuľkami vytvorenými v našej databáze MySQL, ktoré zaznamenávajú údaje udalostí úlohy.

3. Životný cyklus úlohy Spring Cloud

Na začiatku vytvoríme záznam v Úložisko úloh. To znamená, že všetky fazule sú pripravené na použitie v aplikácii a bežať metóda rozhrania Runner je pripravená na vykonanie.

Po dokončení výkonu bežať metódou alebo pri akomkoľvek zlyhaní ApplicationContext udalosť, Úložisko úloh bude aktualizovaný ďalším záznamom.

Počas životného cyklu úlohy môžeme zaregistrovať poslucháčov, ktorí sú k dispozícii od TaskExecutionListener rozhranie. Potrebujeme triedu implementujúcu rozhranie, ktorá má tri metódy - onTaskEnd, onTaksFailed a onTaskStartup spustené v príslušných udalostiach úlohy.

Musíme deklarovať fazuľa implementačnej triedy v našom TaskDemo trieda:

@Bean public TaskListener taskListener () {return new TaskListener (); }

4. Integrácia s Spring Batch

Môžeme vykonať Spring Batch Job ako úlohu a zaznamenávať udalosti vykonávania úlohy pomocou Spring Cloud Task. Ak chcete povoliť túto funkciu, musíme pridať dávkové závislosti týkajúce sa Boot a Cloud:

 org.springframework.boot spring-boot-starter-batch org.springframework.cloud spring-cloud-task-batch 

Tu je odkaz na Maven Central of dávka jarnej cloudovej úlohy.

Ak chcete nakonfigurovať úlohu ako úlohu, musíme mať fazuľu Job zaregistrovanú v Konfigurácia úlohy trieda:

@Bean public Job job2 () {return jobBuilderFactory.get ("job2") .start (stepBuilderFactory.get ("job2step1") .tasklet (new Tasklet () {@Override public RepeatStatus execute (StepContribution příspěvek, ChunkContext chunkContext) vyvolá výnimku {System.out.println ("Táto úloha pochádza z Baeldungu"); vrátiť RepeatStatus.FINISHED;}}). Build ()). Build (); }

Musíme ozdobiť TaskDemo trieda s @EnableBatchProcessing anotácia:

//..Iná anotácia .. @EnableBatchProcessing verejnej triedy TaskDemo {// ...}

The @EnableBatchProcessing anotácia umožňuje funkcie Spring Batch so základnou konfiguráciou potrebnou na nastavenie dávkových úloh.

Teraz, ak spustíme aplikáciu, @EnableBatchProcessing anotácia spustí vykonanie Spring Batch Job a Spring Cloud Task zaznamená udalosti vykonávania všetkých dávkových úloh s druhou úlohou vykonanou v jarný mrak databázy.

5. Spustenie úlohy zo streamu

Úlohy môžeme spúšťať z Spring Cloud Stream. Na tento účel slúži: @EnableTaskLaucnher anotácia. Akonáhle pridáme anotáciu pomocou aplikácie Spring Boot, bude k dispozícii TaskSink:

@SpringBootApplication @EnableTaskLauncher verejná trieda StreamTaskSinkApplication {public static void main (String [] args) {SpringApplication.run (TaskSinkApplication.class, args); }}

The TaskSink prijme správu zo streamu, ktorý obsahuje a Generická správa obsahujúce TaskLaunchRequest ako užitočné zaťaženie. Potom spustí úlohu založenú na súradnici uvedenej v žiadosti o spustenie úlohy.

Mať TaskSink funkčné, vyžadujeme fazuľa nakonfigurovanú, ktorá implementuje TaskLauncher rozhranie. Z dôvodu testovania sa posmievame implementácii tu:

@Bean public TaskLauncher taskLauncher () {return mock (TaskLauncher.class); }

Tu musíme poznamenať, že TaskLauncher rozhranie je k dispozícii až po pridaní súboru spring-cloud-deployer-local závislosť:

 org.springframework.cloud spring-cloud-deployer-local 2.3.1.RELEASE 

Môžeme vyskúšať, či sa úloha spustila vyvolaním vstup z drez rozhranie:

verejná trieda StreamTaskSinkApplicationTests {@Autowired private Sink sink; //}

Teraz vytvoríme inštanciu TaskLaunchRequest a poslať ako užitočné zaťaženie Generická správa objekt. Potom môžeme vyvolať vstup kanál drez vedenie Generická správa objekt v kanáli.

6. Záver

V tomto tutoriáli sme preskúmali, ako funguje Spring Cloud Task a ako ju nakonfigurovať na zaznamenávanie jej udalostí do databázy. Tiež sme sledovali, ako je úloha Spring Batch definovaná a uložená v Úložisko úloh. Na záver sme vysvetlili, ako môžeme spustiť úlohu v rámci Spring Cloud Stream.

Ako vždy, kód je k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found