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?

26
demandé sur Abdull 2013-01-31 05:51:43

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;
33
répondu Biju Kunjummen 2013-01-31 02:04:38
@Component
public class SomeClass {

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

    ....
}
31
répondu Abdull 2013-01-31 01:51:43

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;
13
répondu rustyx 2017-03-21 16:03:48

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.

1
répondu Jose Martinez 2018-04-27 17:57:27