Dies ist ein Beispielcode zum Zuweisen des Werts der Eigenschaftendatei mithilfe der Annotation "@ Value". Das gleiche Ergebnis kann mit der Konfigurationsklasse erzielt werden, indem die Annotation "@ ConfigurationProperties" verwendet wird, die in diesem Artikel nicht behandelt wird.
Umgebung
Referenz
Es ist unklar, ob durch Kommas getrennte Werte in der Eigenschaftendatei als Arrays bezeichnet werden. Mit Spring Boot können Sie jedoch Feldern vom Auflistungstyp durch Kommas getrennte Werte zuweisen.
** Eigenschaftendatei **
properites
hoge.fuga = 100, 200, 300
Alternativ kann es als Array definiert werden, indem dem Eigenschaftsnamen ein Index hinzugefügt wird, z. B. "[0]".
properties
hoge.fuga[0]= 100
hoge.fuga[1]= 200
hoge.fuga[2]= 300
Definieren Sie für das yml-Format, indem Sie dem Wert "-`" voranstellen.
yml
hoge:
fuga:
- 100
- 200
- 300
Code
@Value("${hoge.fuga}")
private List<Integer> fuga;
** Eigenschaftendatei **
properites
hoge.fuga =Apfel,Mandarine,Keiner
yml
hoge:
fuga:
-Apfel
-Mandarine
-Keiner
Code
@Value("${hoge.fuga}")
private List<String> fuga;
** Eigenschaftendatei **
properties
hoge.fuga =Apfel,Mandarine,Keiner
Bei XML-Dateien können Sie einem Set-Feld kein Array zuweisen. Eine Ausnahme wird ausgelöst, wenn Sie versuchen, ein Array wie das folgende zuzuweisen.
yml
hoge:
fuga:
-Apfel
-Mandarine
-Keiner
Wie bei der Eigenschaftendatei ist es jedoch möglich, durch Kommas getrennt zu ersetzen.
yml
hoge:
fuga:Apfel,Mandarine,Keiner
Code
Value("${hoge.fuga}")
private Set<String> fuga;
** Eigenschaftendatei **
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;
** Eigenschaftendatei **
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;
Implementieren Sie beim Zuweisen zum Typ LocalDate / LocalDateTime den folgenden Formatierer in der Einstellungsklasse und registrieren Sie ihn in 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;
}
//Formatierungsimplementierung
private DateTimeFormatter dateTimeFormatterFactory() {
DateTimeFormatterFactoryBean factory = new DateTimeFormatterFactoryBean();
factory.setPattern("yyyy-MM-dd HH:mm:ss");
factory.setTimeZone(TimeZone.getDefault());
factory.afterPropertiesSet();
return factory.getObject();
}
** Eigenschaftendatei **
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;
** Eigenschaftendatei **
properites
hoge.fuga = 2017-08-01
yml
hoge:
fuga: 2017-08-01
Code
@Value("${hoge.fuga}")
private LocalDate fuga;
Keine Notwendigkeit, einen Konverter oder dergleichen zu implementieren. Absolute Pfade und relative Pfade werden als Beispiele angegeben, es gibt jedoch keinen Unterschied in ihrer Handhabung.
** Eigenschaftendatei **
Bei Eigenschaftendateien wird eine Fehlermeldung angezeigt, wenn Sie das Pfadtrennzeichen nicht umgehen. (Im Fall einer Windows-Umgebung ist die Unix / Linux-Umgebung nicht bestätigt.)
properites
hoge.fuga = dir1\\fuga.txt
Für yml müssen Sie das Pfadtrennzeichen nicht umgehen.
yml
hoge:
fuga: dir1\fuga.txt
Code
@Value("${hoge.fuga}")
private Path fuga;
** Eigenschaftendatei **
properites
hoge.fuga = D:\\dir1\\dir2\\fuga.txt
yml
hoge:
fuga: D:\dir1\dir2\fuga.txt
Code
@Value("${hoge.fuga}")
private Path path;
Dies ist ein Beispiel, um den Wert der Eigenschaft dem Aufzählungstyp zuzuweisen.
Lösen Sie die entsprechende Aufzählung auf und ersetzen Sie sie durch die in der Eigenschaftendatei beschriebene Zeichenfolge. Keine Notwendigkeit, einen Konverter oder dergleichen zu implementieren.
** Eigenschaftendatei **
properites
hoge.fuga = Gold
yml
hoge:
fuga: Gold
** Aufzählungsdefinition **
enum
public enum Material {
Bronze,
Sliver,
Gold
;
}
Code
Value("${hoge.fuga}")
private Material fuga;
Lösen Sie die entsprechende Aufzählung auf und ersetzen Sie sie durch den Feldwert des in der Eigenschaftendatei beschriebenen Enumerators (in diesem Beispiel das Feld label). Implementieren Sie in diesem Fall den folgenden Konverter in der Einstellungsklasse und registrieren Sie ihn im Konvertierungsdienst.
@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);
}
}
** Eigenschaftendatei **
properites
hoge.fuga =Geld
yml
hoge:
fuga:Geld
** Aufzählungsdefinition **
enum
public enum Material {
Bronze("Kupfer"),
Sliver("Silber"),
Gold("Geld")
;
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;