Jarné profily

1. Prehľad

V tomto tutoriáli sa zameriame na predstavenie profilov na jar.

Profily sú základnou črtou rámca - čo nám umožňuje mapovať naše fazule na rôzne profily - napríklad, dev, testa prod.

Potom môžeme aktivovať rôzne profily v rôznych prostrediach a zaviesť tak iba fazuľa, ktorú potrebujeme.

2. Použite @Profil na fazuli

Začnime jednoduchým spôsobom a pozrime sa, ako môžeme urobiť fazuľu tak, aby patrila konkrétnemu profilu. Používame @Profil anotácia - fazuľu mapujeme na konkrétny profil; anotácia jednoducho berie názvy jedného (alebo viacerých) profilov.

Zvážte základný scenár: Máme fazuľa, ktorá by mala byť aktívna iba počas vývoja, ale nemala by byť nasadená vo výrobe.

Tú fazuľu anotujeme pomocou a dev profilu a v kontajneri bude iba počas vývoja. Vo výrobe je dev jednoducho nebude aktívny:

@Component @Profile ("dev") verejná trieda DevDatasourceConfig

Ako rýchly sidenote môžu mať pred profilovými názvami predponu aj operátor NOT, napr. ! dev, aby ste ich vylúčili z profilu.

V príklade je komponent aktivovaný, iba ak dev profil nie je aktívny:

@Component @Profile ("! Dev") verejná trieda DevDatasourceConfig

3. Deklarujte profily v XML

Profily je možné konfigurovať aj v XML. The značka má profilov atribút, ktorý nadobúda hodnoty príslušných profilov oddelené čiarkou:

4. Nastavte profily

Ďalším krokom je aktivácia a nastavenie profilov tak, aby boli príslušné fazule zaregistrované v kontajneri.

To je možné vykonať rôznymi spôsobmi, ktoré preskúmame v nasledujúcich častiach.

4.1. Programovo prostredníctvom WebApplicationInitializer Rozhranie

Vo webových aplikáciách WebApplicationInitializer možno použiť na konfiguráciu ServletContext programovo.

Je to tiež veľmi užitočné miesto na programové nastavenie našich aktívnych profilov:

@ Konfigurácia verejnej triedy MyWebApplicationInitializer implementuje WebApplicationInitializer {@Override public void onStartup (ServletContext servletContext) hodí ServletException {servletContext.setInitParameter ("spring.profiles.active", "dev"); }}

4.2. Programovo prostredníctvom Konfigurovateľné prostredie

Profily môžeme nastaviť aj priamo v prostredí:

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

4.3. Parameter kontextu v web.xml

Podobne môžeme definovať aktívne profily v web.xml súbor webovej aplikácie pomocou parametra kontextu:

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

4.4. Systémový parameter JVM

Názvy profilov možno zadať aj prostredníctvom systémového parametra JVM. Tieto profily sa aktivujú počas spustenia aplikácie:

-Dspring.profiles.active = dev

4.5. Premenná prostredia

V prostredí Unixu profily je možné aktivovať aj prostredníctvom premennej prostredia:

export spring_profiles_active = dev

4.6. Profil Maven

Profily pružín je možné aktivovať aj prostredníctvom profilov Maven, pomocou s uvedením jarné.profily.aktívne konfiguračná vlastnosť.

V každom profile Maven môžeme nastaviť a jarné.profily.aktívne nehnuteľnosť:

  dev true dev prod prod 

Jeho hodnota sa použije na nahradenie súboru @ [chránené e-mailom] zástupný symbol v application.properties:

[chránené e-mailom] @

Teraz musíme povoliť filtrovanie zdrojov v pom.xml:

   src / main / resources true ... 

a pripojiť a -P parameter na prepnutie, ktorý profil Maven sa použije:

mvn čistý balík -Pprod

Tento príkaz zabalí aplikáciu pre prod profilu. Uplatňuje sa tiež jarné.profily.aktívne hodnotu prod pre túto aplikáciu, keď je spustená.

4.7. @ActiveProfile v testoch

Testy umožňujú veľmi ľahko určiť, ktoré profily sú aktívne, pomocou @ActiveProfile anotácia na povolenie konkrétnych profilov:

@ActiveProfiles ("dev")

Doteraz sme sa zaoberali viacerými spôsobmi aktivácie profilov. Pozrime sa teraz, ktorá z nich má prioritu pred ostatnými a čo sa stane, ak použijeme viac ako jednu, od najvyššej po najnižšiu prioritu:

  1. Parameter kontextu v web.xml
  2. WebApplicationInitializer
  3. Parameter systému JVM
  4. Premenná prostredia
  5. Maven profil

5. Predvolený profil

Každá fazuľa, ktorá nešpecifikuje profil, patrí do predvolené profilu.

Jar tiež poskytuje spôsob, ako nastaviť predvolený profil, keď nie je aktívny žiadny iný profil - pomocou spring.profiles.default nehnuteľnosť.

6. Získajte aktívne profily

Aktívne profily Spring riadia správanie @Profil anotácia pre povolenie / zakázanie fazule. Môžeme však tiež chcieť získať prístup k zoznamu aktívnych profilov programovo.

Máme dva spôsoby, ako to urobiť, použitím Životné prostredie alebo jarný.aktívny.profil.

6.1. Použitím Životné prostredie

K aktívnym profilom môžeme získať prístup z Životné prostredie objekt vstreknutím:

public class ProfileManager {@Autowired private Environment environment; public void getActiveProfiles () {for (String profileName: environment.getActiveProfiles ()) {System.out.println ("Aktuálny aktívny profil -" + profileName); }}}

6.2. Použitím jarný.aktívny.profil

Prípadne by sme mohli vstúpiť do profilov vstreknutím vlastníctva jarné.profily.aktívne:

@Value ("$ {spring.profiles.active}") private String activeProfile;

Tu, náš activeProfile premenná bude obsahovať názov aktívneho profilu, a ak ich je niekoľko, bude obsahovať ich mená oddelené čiarkou.

Mali by sme však pouvažujte, čo by sa stalo, ak by vôbec nebol aktívny profil. V našom kóde vyššie by absencia aktívneho profilu zabránila vytvoreniu kontextu aplikácie. Výsledkom by bolo IllegalArgumentException kvôli chýbajúcemu zástupnému symbolu pre vstrekovanie do premennej.

Aby sme sa tomu vyhli, môžeme definovať predvolenú hodnotu:

@Value ("$ {spring.profiles.active:}") private String activeProfile;

Teraz, ak nie sú aktívne žiadne profily, náš activeProfile bude iba obsahovať prázdny reťazec.

A ak chceme získať ich zoznam rovnako ako v predchádzajúcom príklade, môžeme to urobiť rozdelením activeProfile premenná:

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

7. Príklad: Samostatné konfigurácie zdroja údajov pomocou profilov

Teraz, keď sú základy z cesty, poďme sa pozrieť na skutočný príklad.

Zvážte scenár kde musíme udržiavať konfiguráciu zdroja údajov pre vývojové aj produkčné prostredie.

Vytvorme spoločné rozhranie DatasourceConfig ktoré je potrebné implementovať oboma implementáciami zdroja údajov:

verejné rozhranie DatasourceConfig {public void setup (); }

Nasleduje konfigurácia vývojového prostredia:

@Component @Profile ("dev") verejná trieda DevDatasourceConfig implementuje DatasourceConfig {@Override public void setup () {System.out.println ("Nastavenie zdroja údajov pre prostredie DEV."); }}

A konfigurácia pre produkčné prostredie:

@Component @Profile ("production") verejná trieda ProductionDatasourceConfig implementuje DatasourceConfig {@Override public void setup () {System.out.println ("Nastavenie zdroja údajov pre prostredie PRODUKCIA."); }}

Teraz vytvorme test a vložme naše rozhranie DatasourceConfig; v závislosti na aktívnom profile vstrekne Spring DevDatasourceConfig alebo ProductionDatasourceConfig fazuľa:

verejná trieda SpringProfilesWithMavenPropertiesIntegrationTest {@Autowired DatasourceConfig datasourceConfig; public void setupDatasource () {datasourceConfig.setup (); }}

Keď dev profil je aktívny, Spring vstrekne DevDatasourceConfig objektu a pri volaní potom nastaviť() metódou je výstup:

Nastavenie zdroja údajov pre prostredie DEV.

8. Profily v Spring Boot

Spring Boot podporuje všetky doteraz načrtnuté konfigurácie profilov s niekoľkými ďalšími funkciami.

Inicializačný parameter jarné.profily.aktívne, predstavený v časti 4, je možné tiež nastaviť ako vlastnosť v Spring Boot na definovanie momentálne aktívnych profilov. Toto je štandardná vlastnosť, ktorú Spring Boot automaticky vyzdvihne:

spring.profiles.active = dev

Na programové nastavenie profilov môžeme tiež použiť SpringApplication trieda:

SpringApplication.setAdditionalProfiles ("dev");

Ak chcete nastaviť profily pomocou nástroja Maven v Spring Boot, môžeme určiť názvy profilov pod spring-boot-maven-plugin v pom.xml:

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

a vykonajte konkrétny cieľ Spring Boot pre Maven:

mvn spring-boot: spustiť

Najdôležitejšou funkciou súvisiacou s profilmi, ktorú Spring Boot prináša, je však súbory vlastností špecifické pre profil. Musia byť pomenované vo formáte prihláška- {profil} .vlastnosti.

Spring Boot automaticky načíta vlastnosti do súboru application.properties súbor pre všetky profily a profily v konkrétnom profile .vlastnosti súbory iba pre zadaný profil.

Môžeme napríklad nakonfigurovať rôzne zdroje údajov pre dev a výroba profily pomocou dvoch pomenovaných súborov application-dev.properties a application-production.properties:

V application-production.properties súboru, môžeme nastaviť a MySql dátový zdroj:

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

Potom môžeme nakonfigurovať rovnaké vlastnosti pre dev profil v application-dev.properties súbor, na použitie pamäte H2 databáza:

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

Týmto spôsobom môžeme ľahko poskytnúť rôzne konfigurácie pre rôzne prostredia.

9. Záver

V tomto článku sme diskutovali o tom, ako na to definovať profil na fazuli a ako potom povoliť správne profily v našej aplikácii.

Nakoniec sme naše chápanie profilov potvrdili jednoduchým príkladom z reálneho sveta.

Implementáciu tohto tutoriálu nájdete v projekte GitHub.


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