Konfiguracija projekta s proljećem

Sadržaj

  • 1. Konfiguracija mora biti specifična za okoliš
  • 2. The .Svojstva datoteke za svako okruženje
  • 3. Proljetna konfiguracija
  • 4. Postavljanje svojstva u svakom okruženju
  • 5. Testiranje i Maven
  • 6. Ide dalje
  • 7. Zaključak

1. Konfiguracija mora biti specifična za okoliš

Konfiguracija mora biti specifična za okoliš - to je samo životna činjenica. Da to nije slučaj, onda to ne bi bila konfiguracija i mi bismo samo kodirali vrijednosti u kodu.

Za Spring aplikaciju postoji nekoliko rješenja koja možete koristiti - od jednostavnih rješenja pa sve do uber-fleksibilnih, vrlo složenih alternativa.

Jedno od najčešćih i izravnih rješenja je fleksibilno korištenje datoteke svojstava i prvoklasnu imovinsku podršku koju pruža Spring.

Kao dokaz koncepta, za potrebe ovog članka, pogledat ćemo jednu specifičnu vrstu svojstva - konfiguraciju baze podataka. Ima smisla koristiti jednu vrstu konfiguracije baze podataka za proizvodnju, drugu za testiranje, a drugu za razvojno okruženje.

2. The .Svojstva Datoteke za svako okruženje

Započnimo naš Proof of Concept - definiranjem okruženja koja želimo ciljati:

  • Dev
  • Inscenacija
  • Proizvodnja

Dalje - izradimo 3 datoteke svojstava - po jednu za svako od ovih okruženja:

  • postojanost-razvojna svojstva
  • postojanost-inscenacija.svojstva
  • postojanost-proizvodnja.svojstva

U tipičnoj Mavenovoj aplikaciji oni mogu boraviti u src / glavni / resursi, ali gdje god da su, morat će biti dostupno na stazi kada je aplikacija postavljena.

Važna napomena - posjedovanje svih datoteka svojstava pod kontrolom verzija čini konfiguraciju mnogo transparentnijom i ponovljiv. To je u suprotnosti s tim da konfiguracije negdje budu na disku i jednostavno im usmjerite Spring.

3. Proljetna konfiguracija

Na proljeće ćemo uključiti ispravnu datoteku koja se temelji na okruženju:

To se naravno može učiniti i s Java konfiguracijom:

@PropertySource ({"classpath: persistence - $ {envTarget: dev} .properties"})

Ovaj pristup omogućuje fleksibilnost posjedovanja višestrukih *.Svojstva datoteke za specifične, usmjerene svrhe. Na primjer - u našem slučaju, konfiguracija Spring Persistent uvozi svojstva postojanosti - što je sasvim logično. Sigurnosna konfiguracija bi uvezla svojstva povezana sa sigurnošću i tako dalje.

4. Postavljanje svojstva u svakom okruženju

Konačni rat koji se može rasporediti sadržavat će sve datoteke svojstava - za ustrajnost, tri varijante postojanost - *. svojstva. Budući da su datoteke zapravo drugačije nazvane, nema straha da ćete slučajno uključiti pogrešnu. Mi ćemo postaviti the envTarget varijabilna i tako odaberite instancu koju želimo iz više postojećih varijanti.

The envTarget varijabla može se postaviti u OS / okruženju ili kao parametar za JVM naredbeni redak:

-DenvTarget = razv

5. Testiranje i Maven

Za integracijske testove kojima treba omogućiti postojanost - jednostavno ćemo postaviti envTarget svojstvo u pom.xml:

 org.apache.maven.plugins maven-surefire-plugin h2_test 

Odgovarajući postojanost-h2_test. svojstva datoteka se može staviti u src / test / resources tako da će koristiti samo za ispitivanje a ne nepotrebno uključeni i raspoređeni u ratu za vrijeme izvođenja.

6. Ići dalje

Postoji nekoliko načina za ugradnju dodatne fleksibilnosti u ovo rješenje ako je potrebno.

Jedan od takvih načina je korištenje a složenije kodiranje imena datoteka svojstava, navodeći ne samo okruženje u kojem će se koristiti, već i više informacija (poput pružatelja trajnosti). Na primjer, mogli bismo koristiti sljedeće vrste svojstava: postojanost-h2.vlasnosti, postojanost- mysql.svojstva ili, još konkretnije: persistence-dev_h2.svojstva, persistence-staging_mysql.properties, persistence-production_amazonRDS.properties.

Prednost takve konvencije imenovanja - i jest samo konvencija jer se ništa ne mijenja u cjelokupnom pristupu - jednostavno je transparentnost. Sada postaje mnogo jasnije što konfiguracija radi samo gledajući imena:

  • persistence-dev_h2.svojstva: pružatelj trajnosti za razv okruženje je lagana H2 baza podataka u memoriji
  • persistence-staging_mysql.properties: pružatelj trajnosti za inscenacija okruženje je instanca MySQL
  • postojanost-proizvodnja_amazon_rds.vlasništvo: pružatelj trajnosti za proizvodnja okoliš je Amazon RDS

7. Zaključak

Ovaj članak govori o fleksibilnom rješenju za konfiguriranje specifičnih za okoliš u proljeće. Alternativno rješenje pomoću profila možete pronaći ovdje.

Implementacija rješenja može se naći u projektu GitHub - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.