Il s'agit d'un exemple de code qui attribue la valeur du fichier de propriétés à l'aide de l'annotation «@ Value».
Le même résultat peut être obtenu avec la classe Configuration en utilisant l'annotation @ ConfigurationProperties
, qui n'est pas traitée dans cet article.
environnement
référence
Il n'est pas clair si les valeurs séparées par des virgules sont appelées des tableaux dans le fichier de propriétés, mais Spring Boot vous permet d'attribuer des valeurs séparées par des virgules aux champs de type collection.
** Dossier de propriété **
properites
hoge.fuga = 100, 200, 300
Sinon, il peut être défini comme un tableau en ajoutant un indice au nom de la propriété, tel que «[0]».
properties
hoge.fuga[0]= 100
hoge.fuga[1]= 200
hoge.fuga[2]= 300
Pour le format yml, définissez en préfixant la valeur avec -
.
yml
hoge:
fuga:
- 100
- 200
- 300
code
@Value("${hoge.fuga}")
private List<Integer> fuga;
** Dossier de propriété **
properites
hoge.fuga =pomme,Mandarine,Aucun
yml
hoge:
fuga:
-pomme
-Mandarine
-Aucun
code
@Value("${hoge.fuga}")
private List<String> fuga;
** Dossier de propriété **
properties
hoge.fuga =pomme,Mandarine,Aucun
Pour les fichiers yml, vous ne pouvez pas affecter un tableau à un champ Set. Une exception sera levée si vous essayez d'attribuer un tableau comme celui ci-dessous.
yml
hoge:
fuga:
-pomme
-Mandarine
-Aucun
Cependant, comme pour le fichier de propriétés, il est possible de le remplacer s'il est séparé par des virgules.
yml
hoge:
fuga:pomme,Mandarine,Aucun
code
Value("${hoge.fuga}")
private Set<String> fuga;
** Dossier de propriété **
properites
hoge.fuga.key1 = val1
hoge.fuga.key2 = val2
yml
hoge:
fuga:
key1: val1
key2: val2
code
@Value("${hoge.fuga}")
private Map<String, String> fuga;
** Dossier de propriété **
properties
hoge.fuga.101 = 123456789
hoge.fuga.201 = 456789012
yml
hoge:
fuga:
101: 123456789
201: 456789012
code
@Value("${hoge.fuga}")
private Map<Integer, Long> fuga;
Lors de l'attribution au type LocalDate / LocalDateTime, implémentez le formateur suivant dans la classe de paramètres et enregistrez-le dans ConversionService.
@Bean
public ConversionService conversionService() {
Set<FormatterRegistrar> registrars = new HashSet<>();
registrars.add(dateTimeFormatterRegistrar());
FormattingConversionServiceFactoryBean factory = new FormattingConversionServiceFactoryBean();
factory.setFormatterRegistrars(registrars);
factory.afterPropertiesSet();
return factory.getObject();
}
private FormatterRegistrar dateTimeFormatterRegistrar() {
DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
registrar.setDateTimeFormatter(dateTimeFormatterFactory());
registrar.setUseIsoFormat(true);
return registrar;
}
//Implémentation du formateur
private DateTimeFormatter dateTimeFormatterFactory() {
DateTimeFormatterFactoryBean factory = new DateTimeFormatterFactoryBean();
factory.setPattern("yyyy-MM-dd HH:mm:ss");
factory.setTimeZone(TimeZone.getDefault());
factory.afterPropertiesSet();
return factory.getObject();
}
** Dossier de propriété **
properites
hoge.fuga = 2017-08-01 23:59:59
yml
hoge:
fuga: 2017-08-01 23:59:59
code
@Value("${hoge.fuga}")
private LocalDateTime fuga;
** Dossier de propriété **
properites
hoge.fuga = 2017-08-01
yml
hoge:
fuga: 2017-08-01
code
@Value("${hoge.fuga}")
private LocalDate fuga;
Pas besoin de mettre en œuvre un convertisseur ou autre. Les chemins absolus et les chemins relatifs sont donnés sous forme d'échantillons, mais il n'y a aucune différence dans leur traitement.
** Dossier de propriété **
Pour les fichiers de propriétés, vous obtiendrez une erreur si vous n'échappez pas au séparateur de chemin. (Dans le cas de l'environnement Windows, l'environnement Unix / Linux n'est pas confirmé)
properites
hoge.fuga = dir1\\fuga.txt
Pour yml, vous n'avez pas besoin d'échapper au séparateur de chemin.
yml
hoge:
fuga: dir1\fuga.txt
code
@Value("${hoge.fuga}")
private Path fuga;
** Dossier de propriété **
properites
hoge.fuga = D:\\dir1\\dir2\\fuga.txt
yml
hoge:
fuga: D:\dir1\dir2\fuga.txt
code
@Value("${hoge.fuga}")
private Path path;
Ceci est un exemple pour affecter la valeur de la propriété au type enum.
Résolvez et remplacez l'énumération correspondante dans la chaîne de caractères décrite dans le fichier de propriétés. Pas besoin de mettre en œuvre un convertisseur ou autre.
** Dossier de propriété **
properites
hoge.fuga = Gold
yml
hoge:
fuga: Gold
** définition enum **
enum
public enum Material {
Bronze,
Sliver,
Gold
;
}
code
Value("${hoge.fuga}")
private Material fuga;
Résolvez et remplacez l'énumération correspondante par la valeur de champ de l'énumérateur décrit dans le fichier de propriétés (le champ appelé label dans cet exemple). Dans ce cas, implémentez le convertisseur suivant dans la classe de paramètres et enregistrez-le dans le service de conversion.
@Bean
public ConversionService conversionService() {
Set<Converter<?, ?>> converters = new HashSet<>();
converters.add(new StringToMaterialConverter());
FormattingConversionServiceFactoryBean factory = new FormattingConversionServiceFactoryBean();
factory.setConverters(converters);
factory.afterPropertiesSet();
return factory.getObject();
}
import com.example.lib.constants.Material;
import org.springframework.core.convert.converter.Converter;
public class StringToMaterialConverter implements Converter<String, Material> {
@Override
public Material convert(String value) {
return Material.lookup(value);
}
}
** Dossier de propriété **
properites
hoge.fuga =Argent
yml
hoge:
fuga:Argent
** définition enum **
enum
public enum Material {
Bronze("cuivre"),
Sliver("argent"),
Gold("Argent")
;
Material(String label) {
this.label = label;
}
private String label;
public String getLabel() {
return this.label;
}
public static Material lookup(String label) {
return Arrays.stream(Material.values())
.filter(material -> material.getLabel().equals(label))
.findFirst().orElseThrow(() -> new RuntimeException("unknown label : " + label));
}
}
code
Value("${hoge.fuga}")
private Material fuga;