web-dev-qa-db-fra.com

Lire la variable d'environnement dans Spring Boot

Quel est le meilleur moyen de lire les variables d’environnement dans SpringBoot ?
Dans Java je l’ai fait en utilisant:

String foo = System.getenv("bar");

Est-il possible de le faire en utilisant l'annotation @Value?

18
Michał Szewczyk

Citant la documentation :

Spring Boot vous permet d'externaliser votre configuration afin de pouvoir utiliser le même code d'application dans différents environnements. Vous pouvez utiliser des fichiers de propriétés, des fichiers YAML, des variables d’environnement et des arguments de ligne de commande pour externaliser la configuration. Les valeurs de propriété peuvent être injectées directement dans vos beans en utilisant le @Value annotation , accessible via l’abstraction Environment de Spring ou lié à des objets structurés via @ConfigurationProperties.

Donc, comme Spring Boot vous permet d’utiliser des variables d’environnement pour la configuration, et depuis Spring Boot, vous pouvez aussi utiliser @Value Pour lire une propriété de la configuration, la réponse est oui.


Ceci peut être testé facilement, ce qui suit donnera le même résultat:

@Component
public class TestRunner implements CommandLineRunner {
    @Value("${bar}")
    private String bar;
    private final Logger logger = LoggerFactory.getLogger(getClass());
    @Override
    public void run(String... strings) throws Exception {
        logger.info("Foo from @Value: {}", bar);
        logger.info("Foo from System.getenv(): {}", System.getenv("bar")); // Same output as line above
    }
}
28
g00glen00b

Vous pouvez le faire avec l'annotation @Value:

@Value("${bar}")
private String myVariable;

Vous pouvez également utiliser deux points pour donner une valeur par défaut si non trouvée:

@Value("${bar:default_value}")
private String myVariable;
18
Rlarroque