2017-02-23 1 views
1

Ich habe die folgenden Feder-Komponente. Ich möchte einen eleganteren Weg finden, den Konfigurationswert zu injizieren.@ Valute Kraft Start Validierung

@Component 
public class Clazz { 

    @Value("${config.value.foo:#{null}}") 
    public String foo; 

    @PostConstruct 
    public validateFoo() throws ConfigException { 
     if (foo == null || "".equals(foo)) { 
      throw new ConfigException("Please provide config"); 
     } 
    } 
} 

Ich benutze YAML-Konfigurationen. Wenn ich nicht #{null} hinzufüge, wird der Konfigurationsname (config.value.foo) in String eingegeben. Außerdem möchte ich, dass die Spring-Boot-App nicht startet, wenn die Konfiguration leer oder leer ist.

Gibt es eine weitere Anmerkung, die den Wert von config injiziert und eine Ausnahme auslöst, wenn der Wert nicht konfiguriert oder null ist?

Edit:

Wie in den Kommentaren angegeben @Value Standardverhalten Ausnahme auf fehlende Konfiguration zu werfen ist. Ich habe das getestet und an einem neuen Projekt mit derselben Konfiguration funktioniert es. Wenn ich den Konfigurationswert entferne, bekomme ich: java.lang.IllegalArgumentException: Could not resolve placeholder Ich nehme an, dass ich wegen einer Bibliothek, die ich importierte, keine Ausnahme bekomme.

+0

Das ist bereits das Standardverhalten, wenn ein '@ Value' kann nicht aufgelöst werden, wird es explodieren. Wenn dies nicht der Fall ist, ist in Ihrem Setup etwas falsch konfiguriert. –

+0

@ M.Deinum wirft es keine Ausnahme. Ich benutze Spring Boot und Yaml Configs. Es injiziert nur den Konfigurationsnamen – user1121883

+0

Dann machst du etwas seltsam in deiner Konfiguration etwas brach das Standardverhalten. –

Antwort

0

Dies kann passieren, wenn es einige Code wie ist:

PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer(); 
c.setIgnoreUnresolvablePlaceholders(true); 

habe ich kein solcher Code in meinem Projekt so habe ich einen Haltepunkt in setIgnoreUnresolvablePlaceholders Diese Methode wird aufgerufen wurde:

"[email protected]" prio=5 tid=0x1 nid=NA runnable 
    java.lang.Thread.State: RUNNABLE 
     at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.setIgnoreUnresolvablePlaceholders(PlaceholderConfigurerSupport.java:178) 
     at springfox.documentation.swagger.configuration.SwaggerCommonConfiguration.swaggerProperties(SwaggerCommonConfiguration.java:38) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 

So ist die Problem wurde von Springfox ausgelöst. Ich deaktiviert Swagger (entfernt @EnableSwagger2) von meinem Projekt und dann @Wert arbeitete wie erwartet und warf Ausnahme auf fehlende Konfiguration