2016-05-02 2 views
0

ich eine yaml-Datei wie folgt: -Federverschluß spezifisches Profil yaml nicht geladen

spring: 
    profiles: test 
msg: test 
--- 
spring: 
    profiles : dev 
msg: hello 
--- 
spring: 
    profiles : prod 
msg: production 

befindet sich in /src/main/java/resources als application.yaml

meinen Code der die Werte lesen aus dieser Datei wie

folgt
@Configuration 
@EnableConfigurationProperties 
public class TestConfig { 

    private String msg; 

    public String getMsg() { 
     return msg; 
    } 

    public void setMsg(String msg) { 
     this.msg = msg; 
    } 
} 

erstelle ich eine Bohne dieser Klasse wie folgt: -

@Bean 
public TestConfig testConfig() { 
    return new TestConfig(); 
} 

Doch der Versuch, das Profil spezifische Informationen zu sehen, mit dem folgenden Code nicht funktioniert: -

public class Main implements CommandLineRunner{ 

    @Autowired 
    private TestConfig testConfig; 

    public static void main(String[] args) { 

     SpringApplication.run(Main.class, args); 

    } 

    @Override 
    public void run(String... args) throws Exception { 
     System.out.println("it works!!!"); 
     System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " + testConfig.getMsg()); 
    } 
} 

Alle hier Hilfe sehr geschätzt wird.

Danke, Amar

+1

Wenn Sie Maven \ Gradle verwenden, sollte es im 'src \ main \ resources \ config'-Ordner sein. Auch die Dateierweiterung sollte' .yml' sein. –

+0

Ich habe die Datei wie erwähnt hinzugefügt, die Erweiterung geändert, ausgeführt ./gradlew -Ddspring.profiles.active = dev sauber bootenrun. Aber es druckt Null –

Antwort

1

Ihre yaml Datei sollte mit drei Strichen --- und wird der Name ".yml" beginnen. Stellen Sie sicher, es in /src/main/resources/ zu positionieren, Ihre aktuelle Position würde es unter einem resources-Verzeichnis in der Ausgabe platzieren, was nicht das ist, was Sie wollen.

+0

Ich habe das auch versucht. aber null wird in der Konsole ausgedruckt –

+0

Wenn Sie starten, ohne ein Profil anzugeben, wird kein Wert vorhanden sein, da Sie nur einen Wert für die Profile 'test', 'prod', 'dev' angeben Sie können entweder einen Standardwert angeben oder setzen Sie ein Standardprofil, um dies zu beheben. – Thomas

+0

Ich plane, verschiedene Eigenschaften für verschiedene Umgebungen zu verwenden, d. H. Unterschiedliche Werte für Entwicklungs-, Test- und Testumgebungen. Wenn meine Anwendung gestartet wird, müssen diese Werte automatisch gelesen werden. –

0

Ich löste mein Problem, Ich hatte einen benutzerdefinierten Boot-Run in meinem Build-Skript, das meine Systemeigenschaft spring.profiles.active auf einen bestimmten Wert überschrieb. Ich habe ein paar Änderungen hier und da gemacht und jetzt funktioniert es gut. Danke für die Zeit!