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:
- Helyi paraméter itt: web.xml
- WebApplicationInitializer
- JVM rendszerparaméter
- Környezeti változó
- 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.