Proljetni profili
1. Pregled
U ovom uputstvu usredotočit ćemo se na uvođenje profila u proljeće.
Profili su ključna značajka okvira - omogućujući nam mapiranje graha na različite profile - na primjer, razv, test, i prod.
Tada možemo aktivirati različite profile u različitim okruženjima kako bismo pokrenuli samo grah koji nam treba.
2. Koristite @Profil na grahu
Krenimo jednostavno i pogledajmo kako grah možemo učiniti određenim profilom. Koristimo @Profil napomena - mapiramo grah na taj određeni profil; napomena jednostavno uzima imena jednog (ili više) profila.
Razmotrimo osnovni scenarij: Imamo grah koji bi trebao biti aktivan samo tijekom razvoja, ali ne i biti ugrađen u proizvodnju.
Taj grah bilježimo s razv profila, a u spremniku će biti prisutan samo tijekom razvoja. U proizvodnji, razv jednostavno neće biti aktivan:
@Component @Profile ("dev") javna klasa DevDatasourceConfig
Kao kratki dodatak, nazivima profila može se dodati i prefiks s operatorom NOT, npr. ! razv, da ih izuzme iz profila.
U primjeru se komponenta aktivira samo ako razv profil nije aktivan:
@Component @Profile ("! Dev") javna klasa DevDatasourceConfig
3. Proglasite profile u XML-u
Profili se također mogu konfigurirati u XML-u. The oznaka ima profili atribut, koji uzima vrijednosti odvojene zarezom primjenjivih profila:
4. Postavite profile
Sljedeći je korak aktiviranje i postavljanje profila tako da se odgovarajući grah registrira u spremniku.
To se može učiniti na razne načine, što ćemo istražiti u sljedećim odjeljcima.
4.1. Programski putem WebApplicationInitializer Sučelje
U web aplikacijama, WebApplicationInitializer može se koristiti za konfiguriranje ServletContext programski.
Također je vrlo zgodno mjesto za programsko postavljanje naših aktivnih profila:
@Configuration javna klasa MyWebApplicationInitializer implementira WebApplicationInitializer {@Override public void onStartup (ServletContext servletContext) baca ServletException {servletContext.setInitParameter ("spring.profiles.active", "dev", "dev", "dev"; " }}
4.2. Programski putem Podesivo okruženje
Također možemo postaviti profile izravno na okoliš:
@Autowired private ConfigurableEnvironment env; ... env.setActiveProfiles ("someProfile");
4.3. Parametar konteksta u web.xml
Slično tome, možemo definirati aktivne profile u web.xml datoteka web aplikacije, koristeći parametar konteksta:
contextConfigLocation /WEB-INF/app-config.xml spring.profiles.active dev
4.4. Parametar JVM sustava
Imena profila također se mogu prosljeđivati putem parametra JVM sustava. Ovi će se profili aktivirati tijekom pokretanja aplikacije:
-Dspring.profiles.active = dev
4.5. Promjenjiva okolina
U Unix okruženju, profili se također mogu aktivirati putem varijable okoline:
izvoz spring_profiles_active = dev
4.6. Profil Maven
Proljetni profili se također mogu aktivirati putem Maven profila, do navodeći opruga.profili.aktivan svojstvo konfiguracije.
U svakom Mavenovom profilu možemo postaviti opruga.profili.aktivan svojstvo:
dev true dev prod prod
Njegova vrijednost koristit će se za zamjenu @ [zaštićen e-poštom] rezervirano mjesto u primjena.svojstva:
[e-pošta zaštićena] @
Sada moramo omogućiti filtriranje resursa u pom.xml:
src / main / resources true ...
i dodati a -P parametar za prebacivanje Maven profila koji će se primijeniti:
mvn čist paket -Prod
Ova će naredba spakirati aplikaciju za prod profil. Također se primjenjuje opruga.profili.aktivan vrijednost prod za ovu aplikaciju kada je pokrenuta.
4.7. @ActiveProfile u testovima
Testovima je vrlo lako odrediti koji su profili aktivni pomoću @ActiveProfile napomena za omogućavanje određenih profila:
@ActiveProfiles ("dev")
Do sada smo pogledali više načina aktiviranja profila. Pogledajmo sada koja ima prioritet nad drugom i što će se dogoditi ako koristimo više njih, od najvišeg do najnižeg prioriteta:
- Parametar konteksta u web.xml
- WebApplicationInitializer
- Parametar JVM sustava
- Promjenjiva okolina
- Maven profil
5. Zadani profil
Bilo koji grah koji ne navodi profil pripada zadano profil.
Spring također nudi način postavljanja zadanog profila kada nijedan drugi profil nije aktivan - pomoću opruga.profili.default imovine.
6. Nabavite aktivne profile
Aktivni profili Springa pokreću ponašanje uređaja @Profil napomena za omogućavanje / onemogućavanje graha. Međutim, možda ćemo htjeti i programski pristupiti popisu aktivnih profila.
Imamo dva načina da to učinimo, koristeći Okoliš ili proljeće.aktivan.profil.
6.1. Koristeći Okoliš
Aktivnim profilima možemo pristupiti s Okoliš objekt ubrizgavanjem:
javna klasa ProfileManager {@Autowired privatno okruženje okoliša; javna void getActiveProfiles () {za (StringName profila: environment.getActiveProfiles ()) {System.out.println ("Trenutno aktivan profil -" + profileName); }}}
6.2. Koristeći proljeće.aktivan.profil
Alternativno, profilima bismo mogli pristupiti ubrizgavanjem imovine opruga.profili.aktivan:
@Value ("$ {spring.profiles.active}") privatni niz activeProfile;
Evo, naša aktivni profil varijabilna sadržavat će ime trenutno aktivnog profila, a ako ih je nekoliko, sadržavat će njihova imena odvojena zarezom.
Međutim, trebali bismo razmislite što bi se dogodilo ako uopće nema aktivnog profila. S našim gornjim kodom, odsutnost aktivnog profila spriječila bi stvaranje konteksta aplikacije. To bi rezultiralo IlegalArgumentException zbog nedostajućeg rezerviranog mjesta za ubrizgavanje u varijablu.
Da bismo to izbjegli, možemo definirati zadanu vrijednost:
@Value ("$ {spring.profiles.active:}") privatni niz activeProfile;
Sada, ako nijedan profil nije aktivan, naš aktivni profil sadržavat će prazan niz.
A ako želimo pristupiti njihovom popisu baš kao u prethodnom primjeru, to možemo učiniti razdvajanjem aktivni profil varijabla:
javna klasa ProfileManager {@Value ("$ {spring.profiles.active:}") private String activeProfiles; javni String getActiveProfiles () {za (StringName profila: activeProfiles.split (",")) {System.out.println ("Trenutno aktivan profil -" + profileName); }}}
7. Primjer: Odvojite konfiguracije izvora podataka pomoću profila
Sad kad se osnove ne maknu, pogledajmo pravi primjer.
Razmotrimo scenarij gdje moramo održavati konfiguraciju izvora podataka i za razvojno i za proizvodno okruženje.
Stvorimo zajedničko sučelje DatasourceConfig koji moraju implementirati obje implementacije izvora podataka:
javno sučelje DatasourceConfig {postavljanje javne praznine (); }
Slijedi konfiguracija razvojnog okruženja:
@Component @Profile ("dev") javna klasa DevDatasourceConfig implementira DatasourceConfig {@Override public void setup () {System.out.println ("Postavljanje izvora podataka za DEV okruženje."); }}
I konfiguracija za proizvodno okruženje:
@Component @Profile ("production") javna klasa ProductionDatasourceConfig implementira DatasourceConfig {@Override public void setup () {System.out.println ("Postavljanje izvora podataka za PRODUKCIJSKO okruženje."); }}
Ajmo sada stvoriti test i ubrizgati naše DatasourceConfig sučelje; ovisno o aktivnom profilu, ubrizgat će Spring DevDatasourceConfig ili ProductionDatasourceConfig grah:
javna klasa SpringProfilesWithMavenPropertiesIntegrationTest {@Autowired DatasourceConfig datasourceConfig; javna praznina setupDatasource () {datasourceConfig.setup (); }}
Kada razv profil je aktivan, Spring injektira DevDatasourceConfig objekt, a pri pozivu tada postaviti() metoda, slijedi izlaz:
Postavljanje izvora podataka za DEV okruženje.
8. Profili u Spring Boot-u
Spring Boot podržava sve dosad navedene konfiguracije profila, s nekoliko dodatnih značajki.
Parametar inicijalizacije opruga.profili.aktivan, predstavljen u odjeljku 4, također se može postaviti kao svojstvo u Spring Boot-u za definiranje trenutno aktivnih profila. Ovo je standardno svojstvo koje će Spring Boot automatski preuzeti:
opruga.profili.aktivan = dev
Za programsko postavljanje profila možemo koristiti i SpringApplication razred:
SpringApplication.setAdditionalProfiles ("dev");
Da bismo postavili profile pomoću Mavena u Spring Boot-u, možemo odrediti imena profila pod dodatak za proljetni boot-maven u pom.xml:
org.springframework.boot spring-boot-maven-plugin dev ...
i izvršite cilj Mavena specifičan za Spring Boot:
mvn spring-boot: trčanje
Ali najvažnija značajka povezana s profilima koju donosi Spring Boot je datoteke svojstava specifičnih za profil. Oni moraju biti imenovani u formatu aplikacija- {profil} .svojstva.
Spring Boot automatski će učitati svojstva u primjena.svojstva datoteku za sve profile i one u određenim profilima .Svojstva datoteke samo za navedeni profil.
Na primjer, možemo konfigurirati različite izvore podataka za razv i proizvodnja profila pomoću dvije imenovane datoteke svojstva- aplikacija.vlasnosti i primjena- proizvodnja.svojstva:
U primjena- proizvodnja.svojstva datoteku, možemo postaviti MySql izvor podataka:
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
Tada možemo konfigurirati ista svojstva za razv profil u svojstva- aplikacija.vlasnosti datoteku za upotrebu u memoriji H2 baza podataka:
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
Na taj način možemo lako pružiti različite konfiguracije za različita okruženja.
9. Zaključak
U ovom smo članku razgovarali o tome kako definirati profil na grahu i kako onda omogućiti prave profile u našoj prijavi.
Konačno, svoje smo razumijevanje profila potvrdili jednostavnim, ali stvarnim primjerom.
Provedbu ovog vodiča možete pronaći u projektu GitHub.