METABYTE
Inapoi la articole

Prioritatea configurației în Spring Boot: un detaliu mic care strică serile

Cunoașterea ordinii de prioritate a setărilor Spring Boot te scapă de ore de depanare.

12 mai 20262 min de citit
Prioritatea configurației în Spring Boot: un detaliu mic care strică serile

Dacă ai modificat vreodată o proprietate în application.yml, ai pornit aplicația, iar ea a ignorat cu încăpățânare voința ta — nu ești singur. Spring Boot are o ierarhie clară a surselor de configurare, iar necunoașterea ei e un bilet direct spre iadul depanării.

Cum funcționează (și cum strică planurile)

Spring Boot aplică setările într-o ordine strictă: cu cât prioritatea e mai mare, cu atât șansele ca acea valoare să ajungă în bean-urile tale sunt mai mari. Ierarhia arată așa (de la cea mai înaltă la cea mai joasă):

  1. Argumente din linia de comandă (ex: --server.port=9090)
  2. Atribute JNDI (cine le mai folosește, dar există)
  3. Proprietăți de sistem JVM (prin -D)
  4. Variabile de mediu (metoda preferată a inginerilor DevOps)
  5. Fișierul application-{profile}.properties/yml (specific profilului)
  6. Fișierul application.properties/yml (principal)
  7. @PropertySource pe clasele de configurare (dacă scrii așa ceva)
  8. Valori implicite (prin @Value cu default)

Cel mai frecvent scenariu de durere: modifici application.yml, dar variabila de mediu SERVER_PORT e deja setată pe server — și aplicația ta ascultă încăpățânată pe portul 8080, nu pe 9090. Sau un coleg a transmis un argument în linia de comandă într-un container Docker, iar tu cauți jumătate de zi de unde vine valoarea ciudată.

Unde e capcana

Problema e că dezvoltatorii uită adesea de sursele cu prioritate mai mare. Variabilele de mediu sunt deosebit de perfide: pot fi setate de sistem, de CI/CD sau pur și simplu uitate într-o sesiune de terminal. O altă capcană — profilurile: dacă pornești aplicația cu spring.profiles.active=prod, atunci application-prod.yml suprascrie setările generale, dar tot cedează argumentelor din linia de comandă.

Cum să nu înnebunești

  • Verifică întotdeauna sursele active prin Actuator: /actuator/env arată toate valorile și originea lor.
  • Folosește prefixe precum --spring.config.additional-location pentru a indica explicit fișierele.
  • Nu te baza pe magie: dacă vezi un comportament neașteptat — începe cu verificarea variabilelor de mediu și a argumentelor de pornire.

Comentariul echipei METABYTE: Știm cât de frustrant e când aplicația ignoră setările tale, ca un adolescent sfaturile părinților. Dezvoltatorii noștri verifică întotdeauna ierarhia configurației, ca să nu pierzi nopți căutând misteriosul server.port. Și dacă vrei să automatizezi gestionarea configurațiilor — știm cum să facem fără durere.

URMATORUL PAS

Ti-a placut abordarea?

Aplicam aceleasi principii in proiectele clientilor: AI, automatizari, produse care nu se sting dupa lansare.