Konfiguracja w Spring Boot (*.properties i *.yml)

Plik application.properties jest głównym miejscem konfiguracji każdej aplikacji wykorzystującej Spring Boota. Pozwala on w prosty sposób nadpisać domyślne ustawienia, poprzez dodanie odpowiednich własności w formacie klucz=wartość.

Domyślna konfiguracja

Podstawowym mechanizmem konfiguracji opartych o Spring Boota jest plik application.properties. Znajduje się on w katalogu /src/main/resources i ma format, w którym do kluczy przypisane są wartości:

własność1=wartość1
własność2=wartość2
własność3=wartość3

Możesz przy jego pomocy w prosty sposób zmienić:

  • banner aplikacji,
  • serwer, pod jakim uruchamiany jest serwer HTTP,
  • skonfigurować logi,
  • i wiele więcej.

Listę podstawowych własności wraz z ich wartościami domyślnymi znajdziesz w dokumentacji. Przykładowo:

spring.datasource.url=jdbc:h2:mem:test
spring.jpa.show-sql=true
spring.jpa.defer-datasource-initialization=true
server.port=8081

Format YAML

Format properties wymusza na nas wielokrotne powtarzanie tego samego prefixu dla powiązanych ze sobą własności, np.:

spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=admin
spring.datasource.password=pass1

Spring Boot wspiera jednak także inny format danych i konfigurację możemy zapisać w pliku application.yml, który ma taką postać:

spring:
  datasource:
    url: jdbc:h2:mem:test
    username: admin
    password: pass1

W przypadku rozbudowanej konfiguracji jest to zdecydowanie bardziej czytelne.

Kurs Spring

Profile

Jeżeli zależy Ci na rozróżnieniu konfiguracja dla różnych profili, co jest szczególnie użyteczne w sytuacji, w której chcesz np. wykorzystać inną bazę danych na środowisku deweloperskim, a inną na środowisku produkcyjnym, to możesz zdefiniować kilka odrębnych plików konfiguracyjnych. Konwencja nazewnictwa jest taka, że plik konfiguracyjny dedykowany dla wybranego profilu powinien mieć nazwę application-XYZ.properties, albo application-XYZ.yml, gdzie XYZ jest nazwą profilu.

Po uruchomieniu aplikacji w profilu dev Spring Boot wykorzysta konfigurację z pliku application.yml i application-dev.yml, a przy uruchomieniu z profilem prod z plików application.yml i application-prod.yml. W sytuacji, w której jakaś własność występuje zarówno w pliku application.yml jak i pliku dedykowanym dla danego profilu, precedens ma własność z pliku dedykowanego dla profilu. Jeżeli więc konfiguracja bazy danych znajduje się w pliku application.yml oraz application-dev.yml i uruchomimy aplikację z profilem dev, to uwzględniona będzie konfiguracja z pliku application-dev.yml.

Co ciekawe formaty plików konfiguracyjnych można mieszać i konfiguracja dla jednego profilu może być zdefiniowana w formacie properties, a dla drugiego już w formacie YAML.

Wsparcie w środowiskach programistycznych

Jeżeli korzystasz z popularnych środowisk programistycznych takich jak IntelliJ IDEA (Ultimate), Eclipse, albo edytora Visual Studio Code z pluginem Spring Tool Suite, to nie musisz pamiętać wszystkich własności na pamięć. Wystarczy, że wpiszesz fragment nazwy elementu, który chcesz skonfigurować, a reszta zostanie automatycznie uzupełniona.

IntelliJ IDEA Ultimate:

Visual Studio Code z pluginem Spring Tool Suite:

Przykłady

Poniżej znajdziesz kilka najczęściej popularnych przykładów konfiguracji, które możesz zapisać w pliku application.properties.

Zmiana portu serwera z domyślnego 8080. Szczególnie przydatne, gdy port 8080 jest zajęty, albo chcemy uruchomić kilka aplikacji jednocześnie.

server.port=8081

Konfiguracja połączenia z bazą danych H2:

spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=admin
spring.datasource.password=admin

Konfiguracja połączenia z bazą danych MySQL:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Europe/Warsaw
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=admin

Zmiana domyślnego Bannera wyświetlanego przy starcie aplikacji (plik my_banner.txt powinien się znajdować w katalogu /src/main/resources):

spring.banner.location=my_banner.txt

Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.