Spring Boot posiada mechanizm automatycznego wczytywania konfiguracji i wstrzykiwania wartości dzięki refleksji.
Przykładowy poniższy zbiór danych może zostać wstrzyknięty poprzez odwołanie się po prefiksie w tym przypadku „db.”
db.host=localhost db.port=3306 db.username=admin db.userpass=admin123
Klasa oznaczona adnotacją @ConfigurationProperties automatycznie pobiera konfiguracje. Flaga prefix definiuje klucze które mają zostać pobrane z pliku konfiguracyjnego.
Poniższa klasa posiada zdefiniowaną adnotacje @ConfigurationProperties(prefix = „db”).
To znaczy, że kontekst Spring przeszuka plik konfiguracyjny i sprawdzi wszystkie wpisy, których klucz rozpoczyna się od „db.”.
Następnie na podstawie pozostałej części klucza będzie wyszukiwał pola o takiej samej nazwie.
Warunkiem koniecznym jest zdefiniowanie geterów i seterów do pól, które chcemy zaczytać z konfiguracji.
@RestController @ConfigurationProperties(prefix = "db") public class DataBaseProperties { private String host; private int port; private String username; private String userpass; public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getUserpass() { return userpass; } public void setUserpass(String userpass) { this.userpass = userpass; } @RequestMapping("/getConnectionParam") public String showConnectionParam() { return "host " + host + " port " + port + " username " + username + " userpass " + userpass; } }
Rezultat programu jest widoczny poniżej:
Zmiana pliku konfiguracyjnego
Standardowo wartości są wczytane z domyślnego pliku konfiguracyjnego jakim jest application.properties. Nic nie stoi na przeszkodzie, aby utowrzyć nowy plik konfiguracyjny. Jednak należy wskazać jego miejsce danej klasie, która będzie wczytywała dane konfiguracyjne. Aby tego dokonać należy dodać nad daną klasą adnotacje @PropertySource z wartością wskazującą na lokalizacje pliku np:
@PropertySource("classpath:application.properties")
W kolejnej części opisany zostanie sposób wczytywania obiektów z pliku konfiguracyjnego.