ALGO25 / BLOG

Spring Boot: configurare, profile și Actuator

Configurează aplicația Spring Boot: proprietăți, porturi, profile și endpointul health. Verifică pornirea și înțelege limitele unui proiect local.

Ultimul pas al proiectului de bază separă configurația de cod și introduce observabilitatea minimă. Vrem să putem schimba portul fără recompilare și să verificăm dacă aplicația este sănătoasă fără să expunem configurația internă.

Punctul de plecare

Continuă după testele API-ului. Versiunile rămân Java 21 și Spring Boot 4.1.1. API-ul este încă un proiect didactic local, fără autentificare. Configurarea unui profil sau adăugarea Actuator nu îl transformă automat într-un serviciu pregătit pentru producție.

Înainte de o livrare reală ai nevoie de identitate, autorizare pentru resurse, stocare durabilă, migrații, limite și o strategie de recuperare. Aici învățăm să recunoaștem aceste granițe și să configurăm un exemplu reproductibil, nu să ascundem lucrurile încă neimplementate.

Configurația proiectului

Înlocuiește src/main/resources/application.properties cu:

spring.application.name=task-api
server.address=127.0.0.1
server.port=${PORT:8080}
spring.datasource.url=jdbc:h2:mem:tasks
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.open-in-view=false
management.endpoints.web.exposure.include=health
management.endpoint.health.show-details=never

${PORT:8080} citește proprietatea sau variabila disponibilă pentru PORT și folosește 8080 dacă nu este definită. Nu punem un port nou direct într-o clasă Java. server.address rămâne local, iar baza H2 rămâne temporară.

Pentru a construi executabilul și a porni pe alt port, rulează:

./mvnw package
java -jar target/task-api-0.0.1-SNAPSHOT.jar --server.port=8081

Comanda package rulează și testele în configurația acestui proiect. Cere apoi http://127.0.0.1:8081/api/hello. Dacă portul este deja folosit, alege altul și folosește aceeași valoare în cererea de verificare. O aplicație care nu a reușit să deschidă portul nu este pornită doar fiindcă a afișat câteva mesaje de inițializare.

Profilele aleg configurații, nu drepturi

Poți crea application-training.properties cu server.port=8082 și activa profilul prin --spring.profiles.active=training. Fișierul de profil completează sau suprascrie proprietățile de bază relevante. Argumentele explicite de linie de comandă pot suprascrie proprietăți din fișiere în configurarea obișnuită Boot.

Un profil numit prod nu verifică singur că ai configurat securitatea, backupul sau costurile. Numele este o selecție de configurație. Verifică valorile efective și sursa lor, în special când există fișiere, variabile de mediu și argumente simultan.

Nu păstra parole reale în exemplul versionat și nu le afișa în loguri. Pentru acest H2 local nu avem nevoie de credențiale ale unei baze externe. Când introduci ulterior un serviciu real, configurația secretelor trebuie aleasă pentru mediul respectiv.

Stare de sănătate și detalii interne

management.endpoints.web.exposure.include=health expune explicit numai health prin HTTP. show-details=never păstrează răspunsul fără componente și detalii interne. GET /actuator/health trebuie să întoarcă 200 cu status UP în condițiile normale ale exemplului.

Un health verde confirmă numai indicatorii configurați. Nu dovedește că un utilizator poate parcurge fiecare funcționalitate sau că toate dependențele viitoare sunt verificate. Păstrează un test separat pentru crearea și citirea sarcinii. Expunerea endpointurilor de management și autorizarea lor sunt două decizii distincte.

Pregătește diagnosticul unei probleme

Pentru un incident, notează acțiunea, momentul, răspunsul și logurile relevante. Nu concluziona că baza este sănătoasă numai din existența procesului Java. Separă pornirea procesului, starea aplicației și succesul unui flux de business.

Într-un sistem real, vei adăuga metrici și identificatori de corelare potriviți. Evită să înregistrezi integral cereri care pot conține informații personale. Pentru exercițiul nostru, un răspuns controlat și testele contractului sunt suficiente ca să exersăm diferența dintre simptome și cauze.

Exersează

  1. Pornește cu --server.port=8081 și verifică răspunsul pe 8081. Nu cere vechiul port și nu interpreta eroarea drept un defect al controllerului.
  2. Cere /actuator/env. Trebuie să primești 404 în configurația proiectului, deoarece endpointul nu este expus.
  3. Activează profilul training, apoi adaugă și --server.port=8083. Verifică portul efectiv și explică de ce o valoare explicită poate avea prioritate.

Verifică înainte să continui

Poți încheia proiectul de bază dacă reconstruiești aplicația, rulezi testele, schimbi configurația și explici limitele stocării și accesului. Continuă cu concurență și limite Java, apoi cu consistență și arhitectură. Folosește proiectul drept punct de pornire pentru întrebări mai dificile.

Întrebări frecvente

Un profil prod face aplicația sigură?

Nu. Este doar un nume de configurație. Proprietățile și comportamentele efective trebuie verificate separat.

Pot expune toate endpointurile Actuator pentru comoditate?

Nu în acest exercițiu. Unele oferă informații sensibile sau operații de administrare. Expune numai ceea ce ai analizat și protejat.

Health UP dovedește funcționarea întregului produs?

Nu. El reflectă indicatorii configurați. Testează separat fluxurile importante pentru utilizator.

De ce păstrăm H2 în memorie?

Pentru un mediu local ușor de refăcut. Stocarea durabilă și migrațiile sunt următorul pas al unui proiect real.

Pot modifica portul fără să schimb sursa Java?

Da. Folosește proprietăți sau argumente de pornire, păstrând o regulă clară de precedență și verificând rezultatul.

Surse

Configurație externă, profile și endpointuri Actuator, consultate la 13 octombrie 2026.