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
?
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’abstractionEnvironment
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
}
}
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;