it-swarm.com.de

SpringBootApplication konnte keine Eigenschaften aus der Datei application.yml laden

Konfigurationsklasse,

@Configuration
public class SpringContext {
@Bean
public BlockingQueue<String> queue(@Value("${queue.size}") int queueSize) {
    return new LinkedBlockingQueue<>();
   }
}

Hauptklasse,

@SpringBootApplication
public class SpringContextTest {

    public static void main(String[] args) {
        final SpringApplication springApplication = new SpringApplication(SpringContext.class);
        springApplication.setWebEnvironment(false);
        springApplication.run();
        System.out.println("queue.size" + System.getProperty("queue.size"));
    }

}

application.yml,

queue.size: 10

Beim Starten der Hauptklasse erhalte ich folgende Fehlermeldung:

Caused by: Java.lang.NumberFormatException: For input string: "${queue.size}"
    at Java.lang.NumberFormatException.forInputString(NumberFormatException.Java:65) ~[na:1.8.0_144]

Ich vermisse einige Anmerkungen ?, Meines Wissens habe ich die minimalen Anmerkungen verwendet, die für eine Spring-Boot-Anwendung erforderlich sind. Ich habe einige ähnliche Posts gesehen, aber nichts geholfen. Auch Versuchte es mit --spring.config.location .

Meine Spring Starter-Version: 1.3.6.Freigabe

6
Krishas

Ihre Konfigurationsdatei ähnelt eher einem application.properties als einem application.yml

queue.size: 10

Das Äquivalent yml sollte lauten:

queue:
    size: 10

UPDATE

Ja, beide sollten in .yml funktionieren, du hast recht. Ich habe genau dein Beispiel repliziert und es hat funktioniert!

Stellen Sie nur sicher, dass sich die application.yml-Datei im Stammverzeichnis von src/main/resources/ befindet. Ich hatte den gleichen Fehler wie Sie, als ich die application.yml-Datei in einem Unterverzeichnis hatte, z. src/main/resources/com/myapp/

2
pleft

Vermutungen

Nach den aktuellen Informationen, die Sie zur Verfügung stellen, kann ich das Problem nicht erneut erstellen. Daher ist Folgendes zu vermuten:

  • Prüfen Sie, ob Dateiname und Dateispeicherort von application.yml richtig sind.
  • Versuchen Sie es mit Spring EL: 

    @Value("#{applicationConfig['queue.size']}")
    
  • Testen Sie das Debuggen von Eigenschaften:

    @Bean
    public BlockingQueue<String> queue(ConfigurableEnvironment env) {
      return new LinkedBlockingQueue<>(); // set breakpoint here, to see if env has your property in PropertySource: applicationConfig
    }
    

Mehr

Mehr über Eigenschaftsquelle und Yaml-Lade in meinem Blog.

Des Weiteren

Wenn die Vorschläge nicht helfen, können Sie besser

  • ein Beispielprojekt bereitstellen, das ein Problem erneut erzeugen kann;
  • bereitstellung eines vollständigen Stacktraces;
0
Tony

Im Abschnitt Externalized Configuration der Spring Boot-Dokumente werden alle Details erläutert, die Sie möglicherweise benötigen.

Wie in Ihrem Beispiel zum Laden von Eigenschaften in der Hauptklasse können Sie Folgendes tun:

  1. Überprüfen Sie zunächst den Speicherort der yaml-Datei. Sie sollte sich in /src/main/resources/application.yaml befinden
  2. Der Inhalt sollte wie folgt aussehen:

     app: 
     wert1: 12 
     wert2: stringValue 
    
  3. Beispielcode,

     package com.demo; 
     
     import org.springframework.boot.SpringApplication; 
     import org.springframework.boot.autoconfigure.SpringBootApplication; 
     import org.springframework.core.env.Environment; 
     
     @ SpringBootApplication 
     öffentliche Klasse App {
     
    
    public static void main( String[] args ){
        SpringApplication app = new SpringApplication(App.class);
        Environment env = app.run(args).getEnvironment();
    
        String value1 = env.getProperty("app.value1");
        String value2 = env.getProperty("app.value2");
    
        System.out.println("---------------- "+value1);
        System.out.println("---------------- "+value2);
    
    }
    
    }
0
Manoj Janaka