Salah sahiji masalah utama dina ngembangkeun sarta operasi saterusna microservices nyaéta konfigurasi kompeten jeung akurat instansi maranéhanana. Dina pamanggih kuring, kerangka anyar tiasa ngabantosan ieu . Eta ngidinan Anjeun pikeun ngajawab sababaraha tugas konfigurasi aplikasi rutin cukup elegantly.
Upami Anjeun gaduh loba microservices, sarta unggal sahijina hadir kalawan file konfigurasi sorangan / file, lajeng aya kamungkinan luhur kasalahan dina salah sahijina, nu bisa jadi hésé pisan nyekel tanpa skill ditangtoskeun jeung sistem logging. Tugas utama anu diatur ku kerangka sorangan nyaéta ngaminimalkeun parameter konfigurasi conto duplikat, ku kituna ngirangan kamungkinan nambihan kasalahan.
Hayu urang nempo hiji conto. Anggap urang gaduh aplikasi saderhana sareng file konfigurasi yaml. Ieu tiasa janten microservice dina basa naon waé. Hayu urang tingali kumaha kerangka tiasa diterapkeun kana jasa ieu.
Tapi ke heula, pikeun genah anu langkung ageung, hayu urang ngadamel proyék kosong dina Idea IDE, saatos masang plugin microconfig.io di jerona:

Kami nyetél konfigurasi peluncuran plugin, anjeun tiasa nganggo konfigurasi standar, sapertos dina screenshot di luhur.
Palayanan kami disebut pesenan, teras dina proyék énggal kami bakal nyiptakeun struktur anu sami:

Pasang file konfigurasi dina polder kalayan nami jasa - aplikasi.yaml. Sadaya jasa mikro diluncurkeun dina sababaraha jinis lingkungan, janten, salian nyiptakeun konfigurasi pikeun jasa éta sorangan, perlu pikeun ngajelaskeun lingkunganana sorangan: pikeun ieu kami bakal nyiptakeun polder. envs sareng tambahkeun file kana nami lingkungan kerja urang. Ku kituna, kerangka bakal nyieun file konfigurasi pikeun layanan di lingkungan dev, Kusabab parameter ieu diatur dina setélan plugin.
Struktur file dev.yaml eta bakal cukup basajan:
mainorder:
components:
- orderKerangka dianggo sareng konfigurasi anu dikelompokkeun babarengan. Pikeun layanan kami, pilih ngaran pikeun grup urutan utama. Kerangka ieu mendakan unggal grup aplikasi sapertos dina file lingkungan sareng nyiptakeun konfigurasi pikeun sadayana, anu dipendakan dina polder anu cocog.
Dina file setélan jasa sorangan pesenan Hayu urang nangtukeun ngan hiji parameter pikeun ayeuna:
spring.application.name: orderAyeuna hayu urang ngajalankeun plugin, sareng éta bakal ngahasilkeun konfigurasi anu dipikabutuh pikeun jasa kami dumasar kana jalur anu ditangtukeun dina sipat:

bisa sareng tanpa masang plugin, kantun unduh distribusi kerangka sareng jalanna tina garis paréntah.
Solusi ieu cocog pikeun dianggo dina server ngawangun.
Eta sia noting yén kerangka sampurna understands sipat sintaksis, nyaéta, file sipat biasa anu tiasa dianggo babarengan dina yaml konfigurasi.
Hayu urang tambahkeun jasa anu sanés pamayaran jeung ngahesekeun nu aya.
В pesenan:
eureka:
instance.preferIpAddress: true
client:
serviceUrl:
defaultZone: http://192.89.89.111:6782/eureka/
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100В pamayaran:
eureka:
instance.preferIpAddress: true
client:
serviceUrl:
defaultZone: http://192.89.89.111:6782/eureka/
server.port: 9998
spring.application.name: payments
db.url: 192.168.0.100Masalah utama sareng konfigurasi ieu nyaéta ayana sajumlah ageung salinan-témpél dina setélan jasa. Hayu urang tingali kumaha kerangka bakal ngabantosan ngaleungitkeun éta. Hayu urang mimitian ku paling atra - ayana konfigurasi eureka dina pedaran unggal microservice. Hayu urang ngadamel diréktori énggal sareng file setélan sareng tambahkeun konfigurasi énggal:

Ayeuna hayu urang tambahkeun garis ka unggal proyék urang #kalebet eureka.
Kerangka otomatis bakal mendakan konfigurasi eureka sareng nyalin kana file konfigurasi jasa, sedengkeun konfigurasi eureka anu kapisah moal didamel, sabab kami moal netepkeunana dina file lingkungan. dev.yaml. Palayanan pesenan:
#include eureka
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100Urang ogé bisa mindahkeun setélan database kana konfigurasi misah ku cara ngarobah garis impor ka #kalebet eureka, oracle.
Perlu dicatet yén kerangka ngalacak unggal parobihan nalika ngarobih file konfigurasi sareng nempatkeun kana file khusus di gigireun file konfigurasi utama. Éntri dina log na sapertos kieu: "Simpen 1 harta robah jadi urutan/diff-application.yaml" Ieu ngamungkinkeun anjeun gancang ngadeteksi parobahan kana file konfigurasi anu ageung.
Nyoplokkeun bagian umum tina konfigurasi ngamungkinkeun anjeun pikeun ngaleungitkeun seueur salinan-témpél anu teu dipikabutuh, tapi henteu ngamungkinkeun anjeun sacara fleksibel nyiptakeun konfigurasi pikeun lingkungan anu béda - titik tungtung jasa kami unik sareng keras disandi, ieu goréng. Hayu urang coba miceun ieu.
Solusi anu saé nyaéta ngajaga sadaya titik tungtung dina hiji konfigurasi anu tiasa dirujuk ku batur. Pikeun tujuan ieu, dukungan pikeun pananda tempat parantos diwanohkeun kana kerangka. Ieu kumaha file konfigurasi bakal robih eureka:
client:
serviceUrl:
defaultZone: http://${endpoints@eurekaip}:6782/eureka/Ayeuna hayu urang tingali kumaha pananda tempat ieu jalan. Sistim nu manggihan komponén ngaranna titiktungtung sarta néangan harti di dinya eurekaip, lajeng ngagantikeun kana konfigurasi urang. Tapi kumaha upami lingkungan anu béda? Jang ngalampahkeun ieu, jieun file setelan dina titiktungtung tipe handap application.dev.yaml. Kerangka sacara mandiri, dumasar kana ekstensi file, mutuskeun lingkungan mana konfigurasi ieu sareng ngamuatna:

eusi file Dev:
eurekaip: 192.89.89.111
dbip: 192.168.0.100Urang tiasa ngadamel konfigurasi anu sami pikeun palabuhan jasa kami:
server.port: ${ports@order}.Sadaya setélan penting aya dina hiji tempat, ku kituna ngirangan kamungkinan kasalahan kusabab panyebaran parameter dina file konfigurasi.
Kerangka nyayogikeun seueur pananda tempat anu siap, contona, anjeun tiasa nampi nami diréktori dimana file konfigurasi aya sareng napelkeunana:
#include eureka, oracle
server.port: ${ports@order}
spring.application.name: ${this@name}Hatur nuhun kana ieu, teu kedah nambihan nami aplikasi dina konfigurasi sareng éta ogé tiasa disimpen dina modul umum, contona, dina eureka anu sami:
client:
serviceUrl:
defaultZone: http://${endpoints@eurekaip}:6782/eureka/
spring.application.name: ${this@name}File konfigurasi pesenan bakal diréduksi jadi hiji baris:
#include eureka, oracle
server.port: ${ports@order}Upami urang henteu peryogi setélan tina konfigurasi indungna, urang tiasa netepkeunana dina konfigurasi urang sareng éta bakal diterapkeun salami generasi. Nyaéta, upami kusabab sababaraha alesan urang peryogi nami anu unik pikeun jasa pesenan, urang ngan ukur ngantunkeun parameter spring.application.name.
Anggap anjeun kedah nambihan setélan logging khusus kana jasa, anu disimpen dina file anu misah, contona, logback.xml. Hayu urang ngadamel grup setélan anu misah pikeun éta:

Dina konfigurasi dasar, kami bakal nyarioskeun kerangka dimana nempatkeun file setélan logging anu kami peryogikeun nganggo pananda tempat @ConfigDir:
microconfig.template.logback.fromFile: ${logback@configDir}/logback.xmlDina file logback.xml urang ngonpigurasikeun appenders baku, anu dina gilirannana ogé bisa ngandung pananda tempat nu kerangka bakal robah salila generasi configs, contona:
<file>logs/${this@name}.log</file>Ku nambahkeun impor kana konfigurasi jasa balik deui, urang otomatis meunang ngonpigurasi logging pikeun tiap jasa:
#include eureka, oracle, logback
server.port: ${ports@order}Waktosna pikeun ngenalkeun langkung rinci sareng sadaya pananda tempat anu aya dina kerangka:
${ieu@env} - mulih ngaran lingkungan ayeuna.
${…@ngaran} - mulih ngaran komponén.
${…@configDir} - mulih jalur pinuh ka diréktori config komponén urang.
${…@resultDir} — mulihkeun jalur lengkep ka diréktori tujuan komponén (file anu hasilna bakal disimpen dina diréktori ieu).
${ieu@configRoot} - mulih jalur pinuh ka diréktori akar toko konfigurasi.
Sistem ieu ogé ngamungkinkeun anjeun kéngingkeun variabel lingkungan, contona jalur ka java:
${env@JAVA_HOME}
Boh, saprak kerangka ditulis dina Java, urang bisa meunangkeun variabel sistem sarupa panggero System:: getProperty ngagunakeun struktur saperti kieu:
${system@os.name}
Eta sia mentioning rojongan pikeun basa extension Spring EL. Babasan di handap ieu tiasa dianggo dina konfigurasi:
connection.timeoutInMs: #{5 * 60 * 1000}
datasource.maximum-pool-size: #{${this@datasource.minimum-pool-size} + 10} sareng anjeun tiasa nganggo variabel lokal dina file konfigurasi nganggo ekspresi #var:
#var feedRoot: ${system@user.home}/feed
folder:
root: ${this@feedRoot}
success: ${this@feedRoot}/archive
error: ${this@feedRoot}/errorKu kituna, kerangka mangrupa alat anu cukup kuat pikeun fine-tuning jeung fléksibel konfigurasi microservices. Kerangka sampurna ngalaksanakeun tugas utami - ngaleungitkeun salinan-témpél dina setélan, konsolidasi setélan sareng, salaku hasilna, ngaminimalkeun kasalahan anu mungkin, bari ngamungkinkeun anjeun gampang ngagabungkeun konfigurasi sareng ngarobih kana lingkungan anu béda.
Upami anjeun kabetot dina kerangka ieu, kuring nyarankeun nganjang halaman resmina sareng kenal sareng lengkep , atawa ngagali kana sumberna .
sumber: www.habr.com
