web-dev-qa-db-fra.com

Dans un projet de démarrage printanier, comment charger application.yaml dans Java Properties

Si j'ai les propriétés suivantes dans application.yaml:

myPro:
   prop1: prop1value
   prop2: prop2value
....

Est-il possible de charger cela dans un objet Java Properties?

5
Hollando Romi

Par défaut, Spring place déjà toutes les propriétés de cette application dans son environnement qui encapsule Properties , par exemple:

@Autowired
private Environment environment;

public void stuff() {
    environment.getProperty("myPro.prop1");
    environment.getProperty("myPro.prop2");
}

Toutefois, si vous souhaitez simplement utiliser les valeurs, vous pouvez toujours utiliser l'annotation @Value, par exemple:

@Value("${myPro.prop1}")
private String prop1;
@Value("${myPro.prop2}")
private String prop2;

Enfin, si vous voulez vraiment un objet Properties avec seulement tout dans myPro, vous pouvez créer le bean suivant:

@ConfigurationProperties(prefix = "myPro")
@Bean
public Properties myProperties() {
    return new Properties();
}

Vous pouvez maintenant autoriser les propriétés et les utiliser:

@Autowired
@Qualifier("myProperties")
private Properties myProperties;

public void stuff() {
    myProperties.getProperty("prop1");
    myProperties.getProperty("prop2");
}

Dans ce cas, vous n'avez pas nécessairement à le lier à Properties, mais vous pouvez utiliser un POJO personnalisé à condition qu'il ait un nom de champ prop1 et un autre nom de champ prop2.

Ces trois options sont également listées dans la documentation :

Les valeurs de propriété peuvent être injectées directement dans vos beans à l'aide de l'annotation @Value, accessible via l'abstraction Spring de Environment ou liées à des objets structurés via @ConfigurationProperties.

5
g00glen00b

Spring gérera le chargement des propriétés si vous suivez les instructions doc de référence . En bref ...

Je suppose que vous utilisez Spring-Boot depuis le tagging . Si vous n'en avez pas déjà un, créez /src/main/resources/application.yml avec le contenu suivant:

myPro:
   prop1: prop1value
   prop2: prop2value

Ensuite, vous pouvez simplement injecter vos valeurs de propriétés comme ceci:

@SpringBootApplication
public class DemoApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Value("${myProp.prop1}")
    String prop1;

    @Value("${myProp.prop2}")
    String prop2;

    @Override
    public void run(String... args) throws Exception {
        System.out.println(prop1);
        System.out.println(prop2);
    }
}
0
Pär Nilsson