Konfiguracja w Spring Boot (*.properties i *.yml)
Spis treści
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.
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.