wake-up-neo.com

Wie kann ein Standardwert in der Spring @Value-Anmerkung korrekt angegeben werden?

Anfangs habe ich folgende Spezifikation:

@Value("#{props.isFPL}")
private boolean isFPL=false;

Dies funktioniert gut, wenn der Wert aus der Eigenschaftendatei abgerufen wird:

isFPL = true

Der folgende Ausdruck mit Standard führt jedoch zu dem Fehler:

@Value("#{props.isFPL:false}")
private boolean isFPL=false;

Ausdrucksanalyse fehlgeschlagen; Die verschachtelte Ausnahme ist org.springframework.expression.spel.SpelParseException: EL1041E: (Pos. 28): Nach dem Analysieren eines gültigen Ausdrucks befinden sich noch weitere Daten im Ausdruck: 'colon (:)'

Ich habe auch versucht, $ anstelle von # zu verwenden. 

@Value("${props.isFPL:true}")
private boolean isFPL=false;

Der Standardwert in Annotation funktioniert einwandfrei, aber ich habe nicht den richtigen Wert aus der Eigenschaftendatei erhalten:

20
Alex

Versuchen Sie es mit $ wie folgt

@Value("${props.isFPL:true}")
private boolean isFPL=false;

stellen Sie außerdem sicher, dass Sie die Option ignore-resource-no-found auf true setzen, damit der Standardwert übernommen wird, wenn die Eigenschaftendatei fehlt.

Platzieren Sie außerdem Folgendes in -

die Kontextdatei, wenn Sie eine xm-basierte Konfiguration verwenden: 

<context:property-placeholder ignore-resource-not-found="true"/>

in der Konfigurationsklasse Bei Verwendung von Java-Konfigurationen:

 @Bean
 public static PropertySourcesPlaceholderConfigurer   propertySourcesPlaceholderConfigurer() {
     PropertySourcesPlaceholderConfigurer p =  new PropertySourcesPlaceholderConfigurer();
     p.setIgnoreResourceNotFound(true);

    return p;
 }
22
shi9

Für int Typvariable:

@Value("${my.int.config: #{100}}")
int myIntConfig;

Hinweis: Es gibt kein Leerzeichen vor den Doppelpunkt, sondern ein zusätzliches Leerzeichen nach den Doppelpunkt.

5
Kevin Liu

Enthält Ihre Spring-Anwendungskontextdatei mehrere PropertyPlaceholder-Beans wie folgt:

<context:property-placeholder ignore-resource-not-found="true" ignore-unresolvable="true" location="classpath*:/*.local.properties" />
<context:property-placeholder location="classpath:/config.properties" />

Wenn ja, dann wird die Eigenschaftssuche nach: props.isFPL nur für die erste Eigenschaftendatei ( .local.properties ) durchgeführt. Wenn die Eigenschaft nicht gefunden wird, wird der Standardwert ( true ) verwendet. wird wirksam und die zweite Eigenschaftsdatei ( config.properties ) wird für diese Eigenschaft effektiv ignoriert.

2
Kevin

Für einen String können Sie wie folgt den Nullwert verwenden:

public UrlTester(@Value("${testUrl:}") String url) {
    this.url = url;
}
1
DaveRlz

Kommt drauf an, wie Sie Ihre Eigenschaften laden, wenn Sie so etwas verwenden

<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />

Dann sollte @Value aussehen

@Value("${isFPL:true}")
1
Mike Summers