#2 Spring Boot – application.properties

Dzisiejszy wpis Spring Boot’owy dotyczy konfiguracji właściwości aplikacji (ang. application properties). Spring Boot idealnie nadaje się do PoC (ang. Proof Of Concept) dzięki temu, że wykorzystuje podejście deklaratywne, czyli określamy co chcemy osiągnąć, a nie jak.

Właściwości są bardzo wydajnym mechanizmem dostarczanym przez Spring Boot’a. Same właściwości można ustawiać na kilka sposobów:

  • w pliku application.properties – zwykły plik tekstowy, który korzysta z wbudowanych właściwości,
  • w pliku application.yml – zwykły plik tekstowy, który wykorzystuje notację YAML,
  • używając zmiennych środowiskowych – wykorzystywane w rozwiązaniach Cloud’owych,
  • używając linii poleceń – poprzez uruchomienie aplikacji z linii poleceń i dodanie parametru.

Domyślnie plik konfiguracyjny znajduje się w folderze resources (Spring Boot będzie szukał pliku ustawionego na classpath’ie).

Kolejność wyszukiwania pliku application.properties:

  • folder /config, który znajduje się w głównym katalogu – resources/config,
  • aktualny katalog – resources,
  • /config ustawiony na classpath’ie,
  • główny classpath.

Ustawienie właściwości z CLI

Aby ustawić/dodać własne właściwości z linii poleceń, należy podczas uruchamiania naszego artefaktu podać wartość.

java -jar CodeCouple-0.1.0-SNAPSHOT.jar --my.property=CodeCouple

Wstrzykiwanie właściwości

Możemy także korzystać z naszych właściwości poprzez wstrzyknięcie ich do pola z użyciem adnotacji @Value. Wtedy możemy wykorzystywać je w naszych klasach.

@Value("${my.property}")
private String value;

Własna klasa właściwości

Wstawmy teraz do naszego pliku następujące dane:

myapp.name = name
myapp.description = desc

Kolejną opcją jest wykorzystanie klasy POJO, która jest jakby “ORM’em” dla naszych właściwości. Klasę tworzymy poprzez dodanie adnotacji @ConfigurationProperties(prefix = “myapp”) – gdzie “myapp” to nazwa początkowa mojej właściwości.

@Component
@ConfigurationProperties(prefix = "myapp")
public class CustomProperties {
    private String name;
    private String description;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}