Dans cet article nous allons voir comment utiliser les fichiers de configuration "properties" avec Spring Boot. La gestion des properties citée dans l'article Spring Properties est également valable pour Spring Boot.
Il est possible d'ommetre l'annotation @Value si l'annotation @ConfigurationProperties est présente sur la classe (Spring Boot). Ici le nom des variables et des properties doivent avoir le même nom :
@PropertySource("classpath:app1.properties")
@ConfigurationProperties
@Component
public class PropertiesClass {
private String email;
// getters and setters
}
Exemple de fichier de properties :
email=test@test.com
Il est possible d'injecter une liste ou encore une classe via les fichiers de properties et l'injection de dépendance. Ici le nom des variables et des properties doivent avoir le même nom :
@Component
@PropertySource("classpath:app1.properties")
@ConfigurationProperties("person")
public class Person {
String name;
List<Car> cars;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Car> getCars() {
return cars;
}
public void setCars(List<Car> cars) {
this.cars = cars;
}
}
@Component
@ConfigurationProperties("car")
public class Car {
private Long id;
private String model;
private String registration;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getRegistration() {
return registration;
}
public void setRegistration(String registration) {
this.registration = registration;
}
}
Fichier app1.properties :
person.name=alex
person.cars[0].registration=aaa-aaa
person.cars[1].registration=bbb-bbb
La validation des données injectées dans les classes se fait à l'aide de l'annotation @Validated :
@Component
@Validated
@PropertySource("classpath:app1.properties")
@ConfigurationProperties("person")
public class Person {
@Size(min = 50)
String name;
List<Car> cars;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Car> getCars() {
return cars;
}
public void setCars(List<Car> cars) {
this.cars = cars;
}
}
Fichier app1.properties :
person.name=alex
L'erreur suivante apparaît au lancement de l'application :
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'person' to com.laulem.springboot.model.Person failed:
Property: person.name
Value: alex
Origin: class path resource [app1.properties] - 2:13
Reason: size must be between 50 and 2147483647
Action:
Update your application's configuration
Il est faisable de fournir des properties au lancement de l'application :
java -jar app.jar --mail="test@mail.com"
java -Dproperty.mail="test@mail.com" -jar app1.jar
De plus, Spring Boot permet la récupération de properties au travers des variables globales :
export mail=test@mail.com
java -jar app1.jar
Il est possible de changer l'emplacement des fichiers properties en vue de les externaliser. Cela est possible en ajoutant le paramètre --spring.config.location au lancement de l'application. Exemple :
$ java -jar app1.jar --spring.config.location=/home/app1/properties/properapp1.properties
LauLem.com - Conditions Générales d'Utilisation - Informations Légales - Charte relative aux cookies - Charte sur la protection des données personnelles - A propos