Konfiguracja Spring Boot z użyciem własnych plików properties
Konfiguracja z użyciem własnych plików properties
Aby nie dopuścić do sztywnego zapisu danych – tzw – „hardkowania” powinniśmy używać w projekcie plików konfiguracyjnych *.properties. Pliki te pozwalają na elastyczną konfigurację aplikacji. Zaczynamy od nowego projektu Spring Boota:
Klasa AppProperties:
@ConfigurationProperties(prefix="app") @Configuration public class AppProperties { AppConfig appConfig; String appName = "this is a custom properties example spring boot app"; public AppConfig getAppConfig() { return appConfig; } public void setAppConfig(AppConfig appConfig) { this.appConfig = appConfig; } public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public static class AppConfig { int appPort = 8080; public int getAppPort() { return appPort; } public void setAppPort(int appPort) { this.appPort = appPort; } } }
Za pomocą adnotacji:
@ConfigurationProperties(prefix="app")
definiujemy prefix który będziemy używać definiując parametry w pliku application.properties:
app.appName = my javaleader.pl app app.appConfig.appPort = 9090
RestControllerApp:
@RestController public class RestControllerApp { AppProperties appProperties; public RestControllerApp(AppProperties appProperties) { this.appProperties = appProperties; } @GetMapping("/appName") public String getAppNameFromProperties() { return appProperties.getAppName(); } @GetMapping("/appPort") public int getAppPortFromProperties() { return appProperties.getAppConfig().getAppPort(); } }
wynik dla:
http://localhost:8080/appPort
to:
9090
wynik dla:
http://localhost:8080/appName
to:
my javaleader.pl app
czyli jak widać powyżej są to dokładnie wartości zdefiniowane w pliku konfiguracyjnym application.properties.
Walidacja właściwości:
Aby dokonać walidacji ustawionych właściwości np. zweryfikować czy nie jest ona pusta należy dodać do pliku pom.xml zależność:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.3.4.Final</version> </dependency>
oraz dodać adnotację @Validated do klasy konfiguracyjnej:
@Validated public class AppProperties {
Dodajmy adnotację @NotEmpty na polu appName (wartość domyślna została dla przykładu usunięta):
@NotEmpty String appName;
Jeśli plik application.properties wyglądałby następująco (brak właściwości appName):
app.appConfig.appPort = 9090
to podczas próby uruchomienia aplikacji otrzymamy następujący błąd:
*************************** APPLICATION FAILED TO START *************************** Description: Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'app' to pl.javaleader.customproperties.configuration.AppProperties... Property: app.appName Value: null Reason: may not be empty Action: Update your application's configuration
Leave a comment