[JAVA] Exemple de code pour attribuer une valeur dans le fichier de propriétés à un champ du type attendu

Aperçu

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

Convertir les valeurs de format de tableau en type de liste

Remplacez un tableau de type numérique

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;

Remplacez un tableau de type chaîne

** Dossier de propriété **

properites


hoge.fuga =pomme,Mandarine,Aucun

yml


hoge:
  fuga:
    -pomme
    -Mandarine
    -Aucun

code

@Value("${hoge.fuga}")
private List<String> fuga;

Valeur du format de tableau sur Définir le type

Remplacez un tableau de type chaîne

** 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;

Valeurs de format clé / valeur au type de mappage

Attribuer la clé à une carte de type chaîne

** 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;

Affecter à une carte dont la clé est de type numérique

** 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;

Valeur de format de date au type LocalDateTime

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();
}

Attribuer au type LocalDateTime

** 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;

Attribuer au type LocalDate

** Dossier de propriété **

properites


hoge.fuga = 2017-08-01

yml


hoge:
  fuga: 2017-08-01

code

@Value("${hoge.fuga}")
private LocalDate fuga;

Valeur de format de chemin de fichier sur type de chemin

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.

Remplacez la valeur du chemin relatif

** 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;

Remplacez la valeur absolue du chemin

** 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;

Convertir la valeur de chaîne en type enum

Ceci est un exemple pour affecter la valeur de la propriété au type enum.

Remplacez l'énumération résolue par la chaîne

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;

Remplacez l'énumération résolue par la valeur de champ de l'énumérateur

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;

Recommended Posts

Exemple de code pour attribuer une valeur dans le fichier de propriétés à un champ du type attendu
Étapes pour rendre Spring Boot capable de faire référence à la valeur dans le fichier de propriétés
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
Comment convertir une valeur d'un type différent et l'affecter à une autre variable
Exemple de code pour obtenir les valeurs de type SQL clés dans Java + MySQL 8.0
Je déteste ce genre de code! Une collection d'anti-motifs réellement vus sur le terrain
Lorsque je suis passé à IntelliJ, il y avait une grande différence dans l'encodage du fichier de propriétés.
Comment spécifier un tableau pour la valeur de retour / l'argument d'une méthode dans le fichier IDL CORBA
Exemple de code pour obtenir les valeurs des principaux types SQL dans Java + Oracle Database 12c
Il ne répond pas à la description en .js du fichier packs
J'ai essayé d'écrire du code comme une déclaration de type en Ruby
Fixez le nom du fichier de guerre à celui défini dans Maven
Ajouter un horodatage au nom de fichier JAR dans Gradle
Exemple de code pour appeler l'API Yahoo! Local Search en Java
[chown] Comment changer le propriétaire d'un fichier ou d'un répertoire
J'ai créé un outil pour afficher la différence du fichier CSV
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Comment obtenir la longueur d'un fichier audio avec Java
Comment incrémenter la valeur de Map sur une ligne en Java
Correction pour empêcher l'augmentation du numéro de connexion à la base de données avec le fournisseur d'authentification personnalisé de l'exemple Cognos SDK
J'ai essayé de créer un exemple de programme en utilisant le problème du spécialiste des bases de données dans la conception pilotée par domaine
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
Exemple de code pour obtenir les valeurs de type JDBC clés dans la base de données Java + H2
Comment savoir quelle version Java d'un fichier de classe a été compilée
Comment obtenir la valeur du paramètre (valeur de la propriété) à partir de la base de données dans Spring Framework
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Samshin sur la valeur du champ caché
Exemple pour décompresser le fichier gz en Java
[Note] [Débutant] Comment écrire lors de la modification de la valeur d'un élément de tableau dans une phrase répétée de Ruby
Création d'un exemple de programme en utilisant le problème d'un spécialiste des bases de données dans DDD Improvement 2
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Exemple de code source pour trouver le multiple commun minimum de plusieurs valeurs en Java
Création d'un exemple de programme en utilisant le problème d'un spécialiste des bases de données avec DDD Improvement 1
Faites attention à la vérification des limites de la valeur d'entrée lors de l'utilisation du type float
Comment créer une combinaison unique de données dans la table intermédiaire des rails
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
J'ai fait un exemple de la façon d'écrire un délégué dans Swift UI 2.0 à l'aide de MapKit
Mémorandum pour nettoyer le code Ruby
Faire une marge à gauche du TextField
Mesurer la taille d'un dossier avec Java
Définir l'heure de LocalDateTime à une heure spécifique
[Ruby] Code pour afficher le jour
Comment se lier avec un fichier de propriétés dans Spring Boot
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
[Spring Boot] Comment se référer au fichier de propriétés
Je veux obtenir la valeur en Ruby
[Jackson] Une histoire sur la conversion de la valeur de retour du type BigDecimal avec un sérialiseur personnalisé.
[Java] Informations entières des caractères du fichier texte acquises par la méthode read ()
Remarque (exemple de code) qui a ajouté un bloc végétal comme Sweet berry de 1.14 dans Minecraft 1.12.2
Installez plusieurs boutons de soumission dans la vue Rails pour obtenir la valeur du bouton enfoncé
Comment enregistrer des fichiers avec l'extension spécifiée sous le répertoire spécifié en Java dans la liste
Passez un argument à la méthode et recevez le résultat de l'opération comme valeur de retour
Exemple de code source de la fonction de restriction d'entrée de JTextField (Exemple de validation: valeur numérique de 1 à 30)