Au départ, j'ai les spécifications suivantes:
@Value("#{props.isFPL}")
private boolean isFPL=false;
Cela fonctionne correctement en obtenant la valeur du fichier de propriétés:
isFPL = true
Cependant, l'expression suivante avec default entraîne l'erreur:
@Value("#{props.isFPL:false}")
private boolean isFPL=false;
L'analyse de l'expression a échoué. L'exception imbriquée est org.springframework.expression.spel.SpelParseException: EL1041E: (pos 28): après l'analyse d'une expression valide, il reste encore des données dans l'expression: 'colon (:)'
J'ai aussi essayé d'utiliser $ au lieu de #.
@Value("${props.isFPL:true}")
private boolean isFPL=false;
Ensuite, la valeur par défaut dans les annotations fonctionne bien mais je n’ai pas obtenu la valeur correcte dans le fichier de propriétés:
Essayez avec $ comme suit
@Value("${props.isFPL:true}")
private boolean isFPL=false;
assurez-vous également que vous définissez ignore-resource-no-found sur true afin que, si le fichier de propriétés est manquant, la valeur par défaut soit prise.
Placez également les éléments suivants dans -
le fichier de contexte si vous utilisez une configuration basée sur xm:
<context:property-placeholder ignore-resource-not-found="true"/>
dans la classe de configuration Si vous utilisez des configurations Java:
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer();
p.setIgnoreResourceNotFound(true);
return p;
}
Pour la variable de type int
:
@Value("${my.int.config: #{100}}")
int myIntConfig;
Remarque: il n'y a pas d'espace avant le colon, mais un espace supplémentaire après le colon.
Votre fichier de contexte d'application Spring contient-il plusieurs beans propertyPlaceholder comme ci-dessous:
<context:property-placeholder ignore-resource-not-found="true" ignore-unresolvable="true" location="classpath*:/*.local.properties" />
<context:property-placeholder location="classpath:/config.properties" />
Si tel est le cas, la recherche de propriété pour: props.isFPL n'aura lieu que pour le premier fichier de propriétés ( .local.properties ); si propriété non trouvée, la valeur par défaut ( true ) prend effet et le second fichier de propriété ( config.properties ) est ignoré pour cette propriété.
Pour une chaîne, vous pouvez définir la valeur null par défaut de la manière suivante:
public UrlTester(@Value("${testUrl:}") String url) {
this.url = url;
}
Dépend de la façon dont vous chargez vos propriétés, si vous utilisez quelque chose comme
<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />
Alors @Value
devrait ressembler à
@Value("${isFPL:true}")