web-dev-qa-db-fra.com

Java Spring: Comment utiliser l'annotation `@ Value` pour injecter une propriété` Environment`?

En utilisant une construction telle que

@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'attribuer un champ avec une propriété.

Existe-t-il un formulaire plus court et plus concis pour le faire?

27
Abdull
@Component
public class SomeClass {

    @Value("#{environment.SOME_KEY_PROPERTY}")
    private String key;

    ....
}
34
Abdull

Vous devriez pouvoir le faire (en supposant que vous avez un PropertySourcesPlaceHolderConfigurer enregistré)

@Value("${SOME_KEY_PROPERTY}")
private String key;
34
Biju Kunjummen

Vous pouvez également trouver utile de fournir une valeurdefaultau cas où la variable ne serait 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 aussi être vide, dans ce cas il se comportera comme si some_property était optionnel:

@Value("${some_property:}")
private String key;

(Remarquez les deux points)

Si la valeur par défaut contient des caractères spéciaux (points, points du côlon, etc.), placez-les dans SpEL comme ceci:

@Value("${some_property:#{'default_value'}}")
private String key;
13
rustyx

Si vous devez ajouter une variable d’environnement comme valeur par défaut.

@Value("${awsId:#{environment.AWS_ACCESS_KEY_ID}}")
@Value("${awsSecret:#{environment.AWS_SECRET_ACCESS_KEY}}")

Ceci est une combinaison de deux réponses précédentes.

2
Jose Martinez