Vytvorenie vlastného štartéra s jarným spustením

1. Prehľad

Jadroví vývojári Spring Boot poskytujú spúšťače pre väčšinu populárnych projektov s otvoreným zdrojovým kódom, ale nie sme nimi obmedzení.

Môžeme tiež napísať vlastné vlastné spúšťače. Ak máme internú knižnicu na použitie v našej organizácii, bolo by dobrým zvykom napísať pre ňu aj štartér, ak sa bude používať v kontexte Spring Boot.

Tieto spúšťače umožňujú vývojárom vyhnúť sa zdĺhavej konfigurácii a rýchlo naskočiť na ich vývoj. Avšak pri mnohých udalostiach na pozadí je niekedy ťažké pochopiť, ako anotácia alebo len zahrnutie závislosti do pom.xml umožňuje toľko funkcií.

V tomto článku demystifikujeme kúzlo Spring Boot, aby sme videli, čo sa deje v zákulisí. Potom tieto koncepty použijeme na vytvorenie štartéra pre našu vlastnú knižnicu.

2. Demystifikovanie automatickej konfigurácie Spring Boot

2.1. Triedy automatickej konfigurácie

Po spustení Spring Boot vyhľadá súbor s názvom jarné továrne v triede. Tento súbor sa nachádza v priečinku META-INF adresár. Pozrime sa na úryvok tohto súboru z projektu spring-boot-autoconfigure:

# Automatická konfigurácia org.springframework.boot.autoconfigure.EnableAutoConfiguration = \ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration, \ org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration, \ org.springframework.bof.work.o MongoAutoConfiguration, \ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

Tento súbor mapuje názov na rôzne konfiguračné triedy, ktoré sa Spring Boot pokúsi spustiť. Podľa tohto úryvku sa teda Spring Boot pokúsi spustiť všetky konfiguračné triedy pre RabbitMQ, Cassandra, MongoDB a Hibernate.

To, či budú alebo nebudú tieto triedy skutočne fungovať, bude závisieť od prítomnosti závislých tried v triede. Napríklad, ak sa triedy pre MongoDB nachádzajú na ceste triedy, MongoAutoConfiguration pobeží a inicializujú sa všetky fazule súvisiace s mongom.

Túto podmienenú inicializáciu umožňuje server @ConditionalOnClass anotácia. Pozrime sa na útržok kódu z MongoAutoConfiguration triedy, aby ste videli jeho použitie:

@Configuration @ConditionalOnClass (MongoClient.class) @EnableConfigurationProperties (MongoProperties.class) @ConditionalOnMissingBean (type = "org.springframework.data.mongodb.MongoDbFactory") verejná trieda MongoAutoConfiguration {// konfiguračný kód}

Teraz ako - ak MongoClient je k dispozícii v classpath - táto konfiguračná trieda pobeží vo fabrike Spring bean pomocou a MongoClient inicializované s predvolenými nastaveniami konfigurácie.

2.2. Vlastné vlastnosti z application.properties Súbor

Spring Boot inicializuje fazuľa pomocou niektorých predkonfigurovaných predvolených nastavení. Ak chcete tieto predvolené hodnoty prepísať, všeobecne ich deklarujeme v application.properties súbor s nejakým konkrétnym názvom. Tieto vlastnosti automaticky zachytáva kontajner Spring Boot.

Pozrime sa, ako to funguje.

V útržku kódu pre MongoAutoConfiguration, @EnableConfigurationProperties anotácia je deklarovaná s MongoProperties trieda, ktorá slúži ako kontajner pre vlastné vlastnosti:

@ConfigurationProperties (prefix = "spring.data.mongodb") verejná trieda MongoProperties {súkromný hostiteľ reťazcov; // ďalšie polia so štandardnými getrami a settermi}

Predpona a názov poľa vytvárajú názvy vlastností v application.properties spis. Takže, nastaviť hostiteľ pre MongoDB musíme do súboru vlastností napísať iba toto:

spring.data.mongodb.host = localhost

Podobne je možné nastaviť hodnoty pre ďalšie polia v triede pomocou súboru vlastností.

3. Vytvorenie vlastného štartéra

Na základe konceptov v sekcii 2 je na vytvorenie vlastného štartéra potrebné napísať nasledujúce komponenty:

  1. Trieda automatickej konfigurácie pre našu knižnicu spolu s triedou vlastností pre vlastnú konfiguráciu.
  2. Štartér pom na zavedenie závislostí knižnice a projektu autokonfigurácie.

Na demonštráciu sme vytvorili jednoduchú knižnicu pozdravov, ktorá prevezme pozdravnú správu pre rôzne denné časy ako konfiguračné parametre a výstup pozdravnej správy. Vytvoríme tiež ukážkovú aplikáciu Spring Boot, ktorá demonštruje použitie našich automatických konfigurácií a štartovacích modulov.

3.1. Modul automatickej konfigurácie

Zavoláme náš modul automatickej konfigurácie greeter-spring-boot-autoconfigure. Tento modul bude mať dve hlavné triedy, t.j. GreeterProperties ktorý umožní nastavenie vlastných vlastností cez application.properties spis a GreeterAutoConfiguartion čím sa vytvorí fazuľa pre pozdravujem knižnica.

Pozrime sa na kód pre obe triedy:

@ConfigurationProperties (prefix = "baeldung.greeter") verejná trieda GreeterProperties {private String userName; súkromná String morningMessage; súkromná reťazcová popoludňajšia správa; súkromná správa String večer; súkromná String nightMessage; // štandardné getre a setre}
@Configuration @ConditionalOnClass (Greeter.class) @EnableConfigurationProperties (GreeterProperties.class) verejná trieda GreeterAutoConfiguration {@Autowired private GreeterProperties greeterProperties; @Bean @ConditionalOnMissingBean verejné GreetingConfig greeterConfig () {String userName = greeterProperties.getUserName () == null? System.getProperty ("user.name"): greeterProperties.getUserName (); // .. GreetingConfig greetingConfig = nový GreetingConfig (); pozdravConfig.put (USER_NAME, meno používateľa); // ... vrátiť pozdravConfig; } @Bean @ConditionalOnMissingBean verejné Greeter greeter (GreetingConfig greetingConfig) {návrat nový Greeter (pozdravConfig); }}

Musíme tiež pridať a jarné továrne súbor v src / main / resources / META-INF adresár s nasledujúcim obsahom:

org.springframework.boot.autoconfigure.EnableAutoConfiguration = \ com.baeldung.greeter.autoconfigure.GreeterAutoConfiguration

Pri štarte aplikácie GreeterAutoConfiguration trieda pobeží ako trieda Zdravší je prítomný v triede. Ak bude úspešne spustený, vyplní kontext aplikácie Spring pomocou GreeterConfig a Zdravší fazuľa prečítaním vlastností cez GreeterProperties trieda.

The @ConditionalOnMissingBean anotácia zabezpečí, že tieto fazule sa vytvoria, iba ak ešte neexistujú. To umožňuje vývojárom úplne prekonať automaticky nakonfigurované fazule definovaním ich vlastných v jednom z parametrov @ Konfigurácia triedy.

3.2. Tvorenie pom.xml

Teraz vytvoríme štartér pom čo prinesie závislosti pre modul automatickej konfigurácie a zelenšiu knižnicu.

Podľa pomenovacej konvencie by všetky štartéry, ktoré nespravuje hlavný tím Spring Boot, mali začínať názvom knižnice, za ktorým nasleduje prípona -štartér pružiny-boot. Náš štartér teda budeme volať ako greeter-spring-boot-starter:

 4.0.0 com.baeldung greeter-spring-boot-starter 0.0.1-SNAPSHOT UTF-8 0.0.1-SNAPSHOT 2.2.6.RELEASE org.springframework.boot spring-boot-starter $ {spring-boot.version} com .baeldung greeter-spring-boot-autoconfigure $ {project.version} com.baeldung greeter $ {greeter.version} 

3.3. Používanie štartéra

Poďme tvoriť greeter-spring-boot-sample-app ktorý použije štartér. V pom.xml musíme to pridať ako závislosť:

 com.baeldung greeter-spring-boot-starter $ {greeter-starter.version} 

Spring Boot automaticky nakonfiguruje všetko a my budeme mať Zdravší fazuľa pripravená na injekciu a použitie.

Poďme tiež zmeniť niektoré z predvolených hodnôt súboru GreeterProperties ich definíciou v application.properties súbor s baeldung.greeter predpona:

baeldung.greeter.userName = Baeldung baeldung.greeter.afternoonMessage = Woha \ Afternoon

Nakoniec použijeme Zdravší fazuľa v našej aplikácii:

Verejná trieda @SpringBootApplication GreeterSampleApplication implementuje CommandLineRunner {@Autowired private Greeter greeter; public static void main (String [] args) {SpringApplication.run (GreeterSampleApplication.class, args); } @Override public void run (String ... args) vyvolá výnimku {String message = greeter.greet (); System.out.println (správa); }}

4. Záver

V tomto rýchlom výučbe sme sa zamerali na zavedenie vlastného štartéra Spring Boot a na to, ako tieto štartéry spolu s mechanizmom automatickej konfigurácie pracujú na pozadí a eliminujú množstvo manuálnej konfigurácie.

Kompletný zdrojový kód pre všetky moduly, ktoré sme vytvorili v tomto článku, nájdete na GitHub.