Bevezetés a Tavaszi Felhő Feladathoz

1. Áttekintés

A Spring Cloud Task célja, hogy biztosítsa a rövid életű mikroszolgáltatások létrehozásának funkcionalitását a Spring Boot alkalmazáshoz.

A Spring Cloud Task programban rugalmasan elvégezhetjük a feladatok dinamikus futtatását, az erőforrások igény szerinti elosztását és az eredmények visszakeresését a Feladat befejezése után.

A Tasks egy új primitív a Spring Cloud Data Flow-n belül, amely lehetővé teszi a felhasználók számára, hogy gyakorlatilag bármilyen Spring Boot alkalmazást rövid életű feladatként hajtsanak végre.

2. Egyszerű feladat alkalmazás fejlesztése

2.1. Releváns függőségek hozzáadása

Először hozzáadhatjuk a függőségkezelés szakaszt tavasz-felhő-feladat-függőségek:

   org.springframework.cloud tavasz-felhő-feladat-függőségek 2.2.3. KÖZLEMÉNY pom import 

Ez a függőségkezelés a függőségek verzióit kezeli az import hatókörén keresztül.

Hozzá kell adnunk a következő függőségeket:

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

Ez a link a Maven Central területére tavasz-felhő-feladat-mag.

A Spring Boot alkalmazás elindításához szükségünk van rugós-bakancs-indító az érintett szülővel.

A Spring Data JPA-t ORM eszközként fogjuk használni, ezért ehhez hozzá kell adnunk a függőséget is:

 org.springframework.boot spring-boot-starter-data-jpa 2.2.6. KÖZLEMÉNY 

Az egyszerű Spring Boot alkalmazás Spring Data JPA-val történő indításának részletei itt érhetők el.

Ellenőrizhetjük a tavasz-bakancs-induló-szülő on Maven Central.

2.2. A @EnableTask Megjegyzés

A Spring Cloud Task funkcionalitásának indításához hozzá kell adnunk @EnableTask kommentár:

@SpringBootApplication @EnableTask nyilvános osztály TaskDemo {// ...} 

Az annotáció hozza SimpleTaskConfiguration osztály a képen, amely felváltva regisztrálja a TaskRepository és infrastruktúrája. Alapértelmezés szerint a memóriában található térkép tárolja a állapot állapotát TaskRepository.

Az elsődleges információk a TaskRepository ben mintázott TaskExecution osztály. Ennek az osztálynak a megnevezett mezői: a feladat neve, kezdési idő, idő vége, exitMessage. A exitMessage a kilépéskor tárolja a rendelkezésre álló információkat.

Ha a kilépést az alkalmazás bármelyik esetének meghibásodása okozza, akkor a teljes kivétel-verem nyomot itt tároljuk.

A Spring Boot interfészt biztosít ExitCodeExceptionMapper amely be nem fogott kivételeket térképez ki az ellenőrzött hibakeresést lehetővé tevő kilépési kódokhoz. A Felhő Feladat az adatokat az adatforrásban tárolja a későbbi elemzés céljából.

2.3. Konfigurálása a Adatforrás mert TaskRepository

A memóriában található térkép a TaskRepository eltűnik, ha a feladat befejeződik, és elveszítjük a Feladat eseményekkel kapcsolatos adatokat. Az állandó tárolóban történő tároláshoz a MySQL-t fogjuk használni adatforrásként a Spring Data JPA-val.

Az adatforrás itt van konfigurálva alkalmazás.yml fájl. A Spring Cloud Task konfigurálása a megadott adatforrás tárolására történő felhasználására TaskRepository, létre kell hoznunk egy kiterjesztő osztályt DefaultTaskConfigurer.

Most konfiguráltan küldhetünk Adatforrás konstruktorként a szuperosztály konstruktorához:

@Autowired private DataSource dataSource; public class HelloWorldTaskConfigurer kiterjeszti a DefaultTaskConfigurer {public HelloWorldTaskConfigurer (DataSource dataSource) {super (dataSource); }}

A fenti konfiguráció működéséhez meg kell jegyeznünk a Adatforrás val vel @Autowired annotációt, és a példányt az a konstruktor argumentumaként injektálja HelloWorldTaskConfigurer a fent meghatározott bab:

@Bean public HelloWorldTaskConfigurer getTaskConfigurer () {return new HelloWorldTaskConfigurer (dataSource); }

Ez befejezi a tároláshoz szükséges konfigurációt TaskRepository MySQL adatbázisba.

2.4. Végrehajtás

Tavaszi csizmában, bármely feladatot végrehajthatunk, még mielőtt az alkalmazás befejezné az indítást. Tudjuk használni ApplicationRunner vagy CommandLineRunner felületeket egy egyszerű feladat létrehozásához.

Meg kell valósítanunk a fuss ezen interfészek módszerét, és deklarálja a megvalósító osztályt babként:

@Component public static class HelloWorldApplicationRunner implementálja az ApplicationRunner {@Override public void run (ApplicationArguments arg0) dobja a {System.out.println ("Hello World from Spring Cloud Task!") Kivételt; }}

Most, ha futtatjuk az alkalmazásunkat, meg kell kapnunk a feladatot, amely a MySQL adatbázisunkban létrehozott szükséges táblákat hozza létre a szükséges kimenetekkel, naplózva a Feladat esemény adatait.

3. Egy tavaszi felhő feladat életciklusa

Az elején létrehozunk egy bejegyzést a TaskRepository. Ez azt jelzi, hogy minden bab készen áll az alkalmazás és a fuss A Runner felület metódusa készen áll a végrehajtásra.

A. Végrehajtásának befejezése után fuss módszerrel vagy a ApplicationContext esemény, TaskRepository egy újabb bejegyzéssel frissül.

A feladat életciklusa alatt regisztrálhatjuk a hallgatókat, amelyek elérhetőek TaskExecutionListener felület. Szükségünk van egy osztályra, amely az interfészt valósítja meg, három módszerrel - onTaskEnd, onTaksFailed és onTaskStartup a feladat megfelelő eseményeinél váltják ki.

Nyilatkoznunk kell a megvalósító osztály babjáról TaskDemo osztály:

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

4. Integráció rugós adaggal

A Tavaszi kötegelt feladatot feladatként hajthatjuk végre és naplózhatjuk a feladat végrehajtásának eseményeit a Tavaszi felhőfeladat használatával. A funkció engedélyezéséhez hozzá kell adnunk a Boot és a Cloud szolgáltatáshoz tartozó kötegelt függőségeket:

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

Itt található a link a Maven Central területére tavasz-felhő-feladat-tétel.

A feladat feladatként történő konfigurálásához regisztrálnunk kell a Job babot a JobConfiguration osztály:

@Bean public job job2 () {return jobBuilderFactory.get ("job2") .start (stepBuilderFactory.get ("job2step1") .tasklet (new Tasklet () {@Override public RepeatStatus execute (StepContribution hozzájárulás, ChunkContext chunkContext) kivételt dob {System.out.println ("Ez a munka Baeldungtól származik"); adja vissza a RepeatStatus.FINISHED;}}). Build ()). Build (); }

Díszítenünk kell a TaskDemo osztályban @EnableBatchProcessing annotáció:

//..Egyéb kommentár .. @EnableBatchProcessing nyilvános osztály TaskDemo {// ...}

A @EnableBatchProcessing az annotáció lehetővé teszi a Spring Batch szolgáltatásokat a kötegelt feladatok beállításához szükséges alapkonfigurációval.

Most, ha futtatjuk az alkalmazást, a @EnableBatchProcessing a kommentár kiváltja a Tavaszi kötegelt feladat végrehajtását, és a Tavaszi Felhő Feladat naplózza az összes kötegelt feladat végrehajtásának eseményeit a másik, a tavaszi felhő adatbázis.

5. Feladat indítása a Streamből

A Tavaszi Felhő-adatfolyamból indíthatjuk el a Feladatokat. Ezt a célt szolgálva rendelkezünk a @EnableTaskLaucnher annotáció. Miután a Spring Boot alkalmazással hozzáadtuk a megjegyzéseket, elérhető lesz egy TaskSink:

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

A TaskSink az üzenetet egy olyan folyamtól kapja, amely a GenericMessage tartalmazó TaskLaunchRequest mint hasznos teher. Ezután a Feladat indítási kérelemben megadott koordinátán alapuló feladatot indít el.

Birtokolni TaskSink funkcionális, szükségünk van egy konfigurált babra, amely megvalósítja TaskLauncher felület. Tesztelés céljából itt kigúnyoljuk a megvalósítást:

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

Itt kell megjegyeznünk, hogy a TaskLauncher felület csak a tavasz-felhő-telepítő-helyi függőség:

 org.springframework.cloud spring-cloud-deployer-local 2.3.1.FELHASZNÁLÁS 

Meghívással tesztelhetjük, hogy a Feladat elindult-e bemenet a Mosogató felület:

public class StreamTaskSinkApplicationTests {@Autowired private Sink sink; //}

Most létrehozunk egy példányát TaskLaunchRequest és ezt küldje el hasznos terhelésként GenericMessage tárgy. Ezután meghívhatjuk a bemenet csatornája Mosogató a GenericMessage objektum a csatornában.

6. Következtetés

Ebben az oktatóanyagban megvizsgáltuk, hogyan teljesít a Spring Cloud Task, és hogyan konfigurálható úgy, hogy eseményeit naplózza egy adatbázisba. Megfigyeltük azt is, hogyan definiálják és tárolják a Spring Batch feladatot a TaskRepository. Végül elmagyaráztuk, hogyan indíthatjuk el a Feladatot a Spring Cloud Streamből.

Mint mindig, a kód elérhető a GitHubon.