Java Spring: comment utiliser l'annotation` @Value `pour injecter une propriété` Environment'?
en utilisant une construction comme
@Component
public class SomeClass {
@Inject
private Environment env;
private String key;
@PostConstruct
private void init() {
key = env.getProperty("SOME_KEY_PROPERTY");
}
....
}
il est possible d'assigner un champ avec une propriété.
y a-t-il une forme plus courte et plus concise pour faire cela?
4 réponses
Vous devriez être capable de faire ceci (en supposant que vous avez un PropertySourcesPlaceHolderConfigurer enregistré)
@Value("${SOME_KEY_PROPERTY}")
private String key;
@Component
public class SomeClass {
@Value("#{environment.SOME_KEY_PROPERTY}")
private String key;
....
}
Vous pouvez également trouver utile de fournir un valeur par défaut dans le cas où la variable n'est pas définie:
@Value("${some_property:default_value}")
private String key;
sinon vous obtiendrez une exception chaque fois que some_property
n'est pas défini.
default_value
peut également être vide, dans ce cas, il se comporte comme si some_property
est optionnel:
@Value("${some_property:}")
private String key;
(noter le colon)
si la valeur par défaut contient des caractères spéciaux (point, deux points, etc.), puis l'envelopper dans SpEL comme ceci:
@Value("${some_property:#{'default_value'}}")
private String key;
Si vous avez besoin d'ajouter une variable d'environnement comme valeur par défaut.
@Value("${awsId:#{environment.AWS_ACCESS_KEY_ID}}")
@Value("${awsSecret:#{environment.AWS_SECRET_ACCESS_KEY}}")
il s'agit d'une combinaison de deux réponses précédentes.