Tavaszi profilok

1. Áttekintés

Ebben az oktatóanyagban a profilok tavaszi bevezetésére fogunk összpontosítani.

A profilok a keret alapvető jellemzői - lehetővé téve számunkra, hogy babjainkat különböző profilokra térképezzük fel - például, dev, teszt, és prod.

Ezután aktiválhatunk különböző profilokat különböző környezetekben, hogy csak a szükséges babot tudjuk bootolni.

2. Használja @Profil egy Babon

Kezdjük egyszerűen, és nézzük meg, hogyan tehetjük a babot egy adott profilba. Használjuk a @Profil annotáció - a babot leképezzük az adott profilra; az annotáció egyszerűen felveszi egy (vagy több) profil nevét.

Vegyünk egy alapvető forgatókönyvet: Van egy babunk, amelynek csak a fejlesztés során kell aktívnak lennie, de nem telepítenie kell a termelésbe.

A babot a-val jegyezzük fel dev profil, és csak a fejlesztés során lesz jelen a tartályban. A termelésben az dev egyszerűen nem lesz aktív:

@Component @Profile ("dev") nyilvános osztály DevDatasourceConfig

Gyors sidenote-ként a profilnevek egy NOT operátorral is előhívhatók, pl. ! dev, hogy kizárja őket egy profilból.

A példában az összetevő csak akkor aktiválódik, ha dev profil nem aktív:

@Component @Profile ("! Dev") nyilvános osztály DevDatasourceConfig

3. Nyilvánítsa a profilokat XML-ben

A profilok XML-ben is konfigurálhatók. A tag van egy profilok attribútum, amely vesszővel elválasztott értékeket vesz fel az alkalmazandó profilokról:

4. Állítsa be a Profilokat

A következő lépés a profilok aktiválása és beállítása úgy, hogy a megfelelő babot regisztrálják a tartályban.

Ez különféle módokon tehető meg, amelyeket a következő szakaszokban vizsgálunk meg.

4.1. Programosan keresztül WebApplicationInitializer Felület

A webes alkalmazásokban WebApplicationInitializer használható a ServletContext programszerűen.

Ez egy nagyon praktikus hely az aktív profiljaink programozott beállításához:

@Configuration public class MyWebApplicationInitializer implementálja a WebApplicationInitializer {@Orride public void onStartup (ServletContext servletContext) dobja a ServletException {servletContext.setInitParameter ("spring.profiles.active", "dev"); }}

4.2. Programosan keresztül ConfigurableEnvironment

Profilokat közvetlenül a környezetre is beállíthatunk:

@Autowired private ConfigurableEnvironment env; ... env.setActiveProfiles ("someProfile");

4.3. Kontextus paraméter a web.xml

Hasonlóképpen meghatározhatjuk az aktív profilokat a web.xml a webalkalmazás fájlja egy helyi paraméter használatával:

 contextConfigLocation /WEB-INF/app-config.xml spring.profiles.active dev 

4.4. JVM rendszerparaméter

A profilnevek egy JVM rendszerparaméteren keresztül is továbbadhatók. Ezek a profilok aktiválódnak az alkalmazás indításakor:

-Dspring.profiles.active = dev

4.5. Környezeti változó

Unix környezetben a profilok a környezeti változón keresztül is aktiválhatók:

export tavaszi_profilok_aktív = dev

4.6. Maven profil

A rugós profilok aktiválhatók a Maven profilokon keresztül is megadva a tavasz.profilok.aktív konfigurációs tulajdonság.

Minden Maven-profilban beállíthatunk egy tavasz.profilok.aktív ingatlan:

  dev igaz dev prod prod 

Értékét a @ [e-mail védett] helyőrző alkalmazás.tulajdonságok:

[e-mail védett] @

Most engedélyeznünk kell az erőforrások szűrését pom.xml:

   src / main / resources true ... 

és csatolja a -P paraméter, amellyel meg lehet váltani, hogy mely Maven profilt alkalmazzuk:

mvn tiszta csomag -Pprod

Ez a parancs az alkalmazást csomagolja prod profil. Alkalmazza a tavasz.profilok.aktív érték prod ehhez az alkalmazáshoz, amikor fut.

4.7. @ActiveProfile a tesztekben

A tesztek segítségével nagyon könnyen meghatározható, hogy milyen profilok legyenek aktívak a @ActiveProfile megjegyzés az adott profilok engedélyezéséhez:

@ActiveProfiles ("dev")

Eddig a profilok aktiválásának több módját vizsgáltuk. Most nézzük meg, melyiknek van prioritása a másikkal szemben, és mi történik, ha többet használunk, a legmagasabbtól a legalacsonyabbig:

  1. Helyi paraméter itt: web.xml
  2. WebApplicationInitializer
  3. JVM rendszerparaméter
  4. Környezeti változó
  5. Maven profil

5. Az alapértelmezett profil

Minden olyan bab, amely nem határoz meg profilt, a alapértelmezett profil.

A Spring lehetőséget nyújt az alapértelmezett profil beállítására is, ha más profil nincs aktív - a tavasz.profilok.alapértelmezés ingatlan.

6. Aktív profilok beszerzése

Spring aktív profiljai vezérlik a @Profil megjegyzés a bab engedélyezéséhez / letiltásához. Előfordulhat azonban, hogy az aktív profilok listáját programozottan is szeretnénk elérni.

Kétféleképpen tehetjük meg, felhasználásával Környezet vagy tavasz.aktív.profil.

6.1. Használata Környezet

Az aktív profilokat a Környezet objektum beadásával:

public class ProfileManager {@Autowired privát környezet környezet; public void getActiveProfiles () {for (String profileName: environment.getActiveProfiles ()) {System.out.println ("Jelenleg aktív profil -" + profileName); }}}

6.2. Használata tavasz.aktív.profil

Alternatív megoldásként hozzáférhetünk a profilokhoz az ingatlan injektálásával tavasz.profilok.aktív:

@Value ("$ {spring.profiles.active}") privát karakterlánc activeProfile;

Itt, a mi activeProfile változó a jelenleg aktív profil nevét tartalmazza, és ha több van, akkor vesszővel elválasztva tartalmazza a nevüket.

Meg kell azonban tennünk fontolja meg, mi történne, ha egyáltalán nincs aktív profil. A fenti kódunkkal az aktív profil hiánya megakadályozhatja az alkalmazáskörnyezet létrehozását. Ennek eredményeként egy IllegalArgumentException a változóba történő injekció hiánya miatt.

Ennek elkerülése érdekében megtehetjük definiál egy alapértelmezett értéket:

@Value ("$ {spring.profiles.active:}") privát karakterlánc activeProfile;

Most, ha egyetlen profil sem aktív, akkor activeProfile csak egy üres karakterláncot tartalmaz.

És ha az előző példához hasonlóan hozzá akarunk férni a listájukhoz, akkor a activeProfile változó:

public class ProfileManager {@Value ("$ {spring.profiles.active:}") private String activeProfiles; public String getActiveProfiles () {for (String profileName: activeProfiles.split (",")) {System.out.println ("Jelenleg aktív profil -" + profileName); }}}

7. Példa: Az adatforrás-konfigurációk elkülönítése profilok használatával

Most, hogy az alapok nincsenek útban, nézzünk meg egy valós példát.

Vegyünk egy forgatókönyvet, ahol karbantartanunk kell az adatforrás-konfigurációt mind a fejlesztési, mind a gyártási környezet számára.

Hozzunk létre egy közös felületet DatasourceConfig amelyet mindkét adatforrás-megvalósításnak végre kell hajtania:

nyilvános felület DatasourceConfig {public void setup (); }

A következő a fejlesztői környezet konfigurációja:

@Component @Profile ("dev") nyilvános osztály A DevDatasourceConfig végrehajtja a DatasourceConfig {@Override public void setup () {System.out.println ("Adatforrás beállítása DEV környezethez."); }}

És a gyártási környezet konfigurálása:

@Component @Profile ("production") public class ProductionDatasourceConfig implementálja a DatasourceConfig {@Orride public void setup () {System.out.println ("Adatforrás beállítása PRODUCTION környezethez."); }}

Most hozzunk létre egy tesztet és injektáljuk a DatasourceConfig felületünket; az aktív profiltól függően Spring fog injekciót adni DevDatasourceConfig vagy ProductionDatasourceConfig bab:

public class SpringProfilesWithMavenPropertiesIntegrationTest {@Autowired DatasourceConfig datasourceConfig; public void setupDatasource () {datasourceConfig.setup (); }}

Amikor az dev profil aktív, a Spring injekciót ad DevDatasourceConfig objektumot, és amikor akkor hív beállít() módszer, a következő a kimenet:

Adatforrás beállítása a DEV környezethez.

8. Profilok a tavaszi csomagtartóban

A Spring Boot támogatja az összes eddig körvonalazott profilkonfigurációt, néhány további funkcióval.

Az inicializálási paraméter tavasz.profilok.aktív, a 4. szakaszban bevezetve, a Spring Boot tulajdonságaként is beállítható az aktív profilok meghatározásához. Ez egy szokásos tulajdonság, amelyet a Spring Boot automatikusan felvesz:

tavasz.profilok.aktív = dev

A profilok programozott beállításához használhatjuk a SpringApplication osztály:

SpringApplication.setAdditionalProfiles ("dev");

A profilok beállításához a Maven segítségével a Spring Boot alkalmazásban megadhatjuk a profilneveket spring-boot-maven-plugin ban ben pom.xml:

  org.springframework.boot spring-boot-maven-plugin dev ... 

és hajtsa végre a Spring Boot-specifikus Maven célt:

mvn spring-boot: fut

De a Spring Boot legfontosabb profilokkal kapcsolatos szolgáltatása az profil-specifikus tulajdonságfájlok. Ezeket formátumban kell megnevezni alkalmazás- {profil} .tulajdonságok.

A Spring Boot automatikusan betölti a tulajdonságokat egy alkalmazás.tulajdonságok fájl az összes profilhoz, és azok is, amelyek profil-specifikusak .tulajdonságok fájlok csak a megadott profilhoz.

Például különböző adatforrásokat konfigurálhatunk a dev és Termelés profilokat két megnevezett fájl használatával application-dev.properties és alkalmazás- gyártás.tulajdonságok:

Ban,-ben alkalmazás- gyártás.tulajdonságok fájlt, beállíthatunk egy MySql adatforrás:

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver spring.datasource.url = jdbc: mysql: // localhost: 3306 / db spring.datasource.username = root spring.datasource.password = root

Ezután konfigurálhatjuk ugyanazokat a tulajdonságokat a dev profil a application-dev.properties fájlt a memóriában H2 adatbázis:

spring.datasource.driver-class-name = org.h2.Driver spring.datasource.url = jdbc: h2: mem: db; DB_CLOSE_DELAY = -1 spring.datasource.username = sa spring.datasource.password = sa

Így könnyen konfigurálhatunk különböző konfigurációkat különböző környezetekhez.

9. Következtetés

Ebben a cikkben megvitattuk, hogyan kell meghatározzon egy profilt babon és hogyan kell akkor engedélyezze a megfelelő profilokat alkalmazásunkban.

Végül egy egyszerű, de valós példával igazoltuk a profilok megértését.

Ennek az oktatóanyagnak a megvalósítása megtalálható a GitHub projektben.