Stvaranje prilagođenog startera s Spring Bootom

1. Pregled

Jezgreni programeri Spring Boot-a nude početak većine popularnih projekata otvorenog koda, ali mi nismo ograničeni na njih.

Također možemo napisati vlastite prilagođene početnike. Ako u svojoj organizaciji imamo internu knjižnicu, bila bi dobra praksa da se za nju napiše i početnik ako će se koristiti u kontekstu Spring Boot.

Ovi početnici omogućavaju programerima da izbjegnu dugotrajnu konfiguraciju i brzo pokrenu svoj razvoj. Međutim, s puno stvari koje se događaju u pozadini, ponekad je teško razumjeti kako se napomena ili samo uključivanje ovisnosti u pom.xml omogućuje toliko značajki.

U ovom ćemo članku demistificirati magiju Spring Boot kako bismo vidjeli što se događa iza kulisa. Tada ćemo te koncepte koristiti za stvaranje startera za vlastitu prilagođenu knjižnicu.

2. Demistifikacija autokonfiguracije proljetnog čizma

2.1. Klase automatske konfiguracije

Kada se pokrene Spring Boot, traži datoteku s imenom proljeće.tvornice u razrednoj stazi. Ova se datoteka nalazi u META-INF imenik. Pogledajmo isječak ove datoteke iz projekta spring-boot-autoconfigure:

# Automatska konfiguracija org.springframework.boot.autoconfigure.EnableAutoConfiguration = \ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration, \ org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfigure.config. MongoAutoConfiguration, \ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

Ova datoteka preslikava ime u različite klase konfiguracije koje će Spring Boot pokušati pokrenuti. Dakle, prema ovom isječku, Spring Boot će pokušati pokrenuti sve klase konfiguracije za RabbitMQ, Cassandra, MongoDB i Hibernate.

Hoće li se ove klase stvarno izvoditi, ovisit će o prisutnosti ovisnih klasa na putu klase. Na primjer, ako se klase za MongoDB nalaze na putu predavanja, MongoAutoConfiguration pokrenut će se i svi grahovi povezani s mongoom bit će inicijalizirani.

Ovu uvjetnu inicijalizaciju omogućuje @ConditionalOnClass bilješka. Pogledajmo isječak koda iz MongoAutoConfiguration klase da biste vidjeli njegovu upotrebu:

@Configuration @ConditionalOnClass (MongoClient.class) @EnableConfigurationProperties (MongoProperties.class) @ConditionalOnMissingBean (type = "org.springframework.data.mongodb.MongoDbFactory") javna klasa MongoAutoConfiguracija {MongoAutoConfoniguration}}

Sad kako - ako je MongoClient je dostupan u stazi klasa - ova klasa konfiguracije će se popunjavati u tvornici Spring bean s MongoClient inicijalizirano zadanim postavkama konfiguracije.

2.2. Prilagođena svojstva iz primjena.svojstva Datoteka

Spring Boot inicijalizira grah koristeći neke unaprijed konfigurirane zadane postavke. Da bismo nadjačali te zadane vrijednosti, obično ih prijavljujemo u primjena.svojstva datoteka s nekim određenim imenom. Ova svojstva automatski preuzima spremnik Spring Boot.

Da vidimo kako to funkcionira.

U isječku koda za MongoAutoConfiguration, @EnableConfigurationProperties napomena se deklarira s MongoProperties klasa koja djeluje kao spremnik za prilagođena svojstva:

@ConfigurationProperties (prefix = "spring.data.mongodb") javna klasa MongoProperties {private String host; // ostala polja sa standardnim getterima i setterima}

Prefiks i naziv polja čine imena svojstava u primjena.svojstva datoteka. Dakle, za postavljanje domaćin za MongoDB u datoteku svojstava trebamo upisati samo sljedeće:

spring.data.mongodb.host = localhost

Slično tome, vrijednosti za druga polja u klasi mogu se postaviti pomoću datoteke svojstava.

3. Izrada prilagođenog pokretača

Na temelju koncepata u odjeljku 2, da bismo stvorili prilagođeni pokretač, moramo napisati sljedeće komponente:

  1. Klasa automatskog konfiguriranja za našu knjižnicu zajedno s klasom svojstava za prilagođenu konfiguraciju.
  2. Starter pom kako bi se uvele ovisnosti knjižnice i projekta autokonfiguracije.

Za demonstraciju stvorili smo jednostavnu knjižnicu pozdrava koja će kao konfiguracijske parametre uzimati pozdravnu poruku za različito doba dana i izlaznu pozdravnu poruku. Također ćemo stvoriti uzorak aplikacije Spring Boot kako bismo demonstrirali upotrebu naših modula za automatsko podešavanje i pokretanje.

3.1. Modul za automatsko podešavanje

Nazvat ćemo naš modul za automatsko konfiguriranje greeter-spring-boot-autoconfigure. Ovaj modul imat će dvije glavne klase, tj. GreeterProperties što će omogućiti postavljanje prilagođenih svojstava putem primjena.svojstva turpija i GreeterAutoConfiguartion koji će stvoriti grah za pozdravi knjižnica.

Pogledajmo kod za oba razreda:

@ConfigurationProperties (prefix = "baeldung.greeter") javna klasa GreeterProperties {private String userName; private String morningMessage; private String afternoonMessage; private String eveningMessage; private String nightMessage; // standardni geteri i postavljači}
@Configuration @ConditionalOnClass (Greeter.class) @EnableConfigurationProperties (GreeterProperties.class) javna klasa GreeterAutoConfiguration {@Autowired private GreeterProperties greeterProperties; @Bean @ConditionalOnMissingBean javni GreetingConfig greeterConfig () {Niz userName = greeterProperties.getUserName () == null? System.getProperty ("user.name"): greeterProperties.getUserName (); // .. GreetingConfig pozdravConfig = novi GreetingConfig (); pozdravConfig.put (USER_NAME, korisničko ime); // ... vrati pozdravConfig; } @Bean @ConditionalOnMissingBean javni pozdrav Greeter (GreetingConfig pozdravConfig) {return new Greeter (pozdravConfig); }}

Također trebamo dodati a proljeće.tvornice datoteku u src / main / resources / META-INF imenik sa sljedećim sadržajem:

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

Prilikom pokretanja aplikacije, GreeterAutoConfiguration klasa će se izvoditi ako klasa Pozdrav je prisutan u razrednoj stazi. Ako se uspješno pokrene, popunit će kontekst aplikacije Spring s GreeterConfig i Pozdrav grah čitanjem svojstava putem GreeterProperties razred.

The @ConditionalOnMissingBean napomena će osigurati da će se ovi grah stvoriti samo ako već ne postoji. To omogućuje programerima da u potpunosti nadjačaju automatski konfigurirani grah definiranjem vlastitog u jednom od @Konfiguracija razreda.

3.2. Stvaranje pom.xml

Ajmo sada stvoriti starter pom što će donijeti ovisnosti za modul za automatsko konfiguriranje i pozdravnu knjižnicu.

Prema konvenciji o imenovanju, svi pokretači kojima ne upravlja jezgreni tim Spring Boot-a trebali bi započeti s imenom knjižnice nakon čega slijedi sufiks -spring-boot-starter. Tako ćemo našeg startera nazvati kao 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. Korištenje Startera

Stvarajmo greeter-spring-boot-sample-app koji će koristiti starter. U pom.xml moramo ga dodati kao ovisnost:

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

Spring Boot će automatski konfigurirati sve, a mi ćemo imati Pozdrav grah spreman za ubrizgavanje i upotrebu.

Promijenimo i neke od zadanih vrijednosti GreeterProperties njihovim definiranjem u primjena.svojstva datoteka s baeldung.greter prefiks:

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

Napokon, upotrijebimo Pozdrav grah u našoj aplikaciji:

@SpringBootApplication javna klasa GreeterSampleApplication implementira CommandLineRunner {@Autowired private Greeter greeter; javna statička void glavna (String [] args) {SpringApplication.run (GreeterSampleApplication.class, args); } @Override void void run (String ... args) baca iznimku {String message = greeter.greet (); System.out.println (poruka); }}

4. Zaključak

U ovom smo se brzom vodiču usredotočili na uvođenje prilagođenog pokretača Spring Boot i na to kako ti pokretači, zajedno s mehanizmom za automatsko podešavanje, rade u pozadini kako bi eliminirali puno ručne konfiguracije.

Kompletni izvorni kod za sve module koje smo stvorili u ovom članku možete pronaći na GitHubu.


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