2016-12-15 7 views
1

ich hinzufügen, habe einige Config in meiner application.yml Datei und ich möchte es von meinem Java-Code lesen.Get application.yml Infos im Frühjahr

Der zusätzliche Knoten in der YAML-Datei sieht wie folgt aus:

myConfig: 
    projectOne: 
     mantisID: 501 
     user: username 
     password: passwd 
    projectTwo: 
     mantisID: 502 
     user: username 
     password: passwd 

Was ich wollen, ist eine Liste der Projekt Objekte zu erhalten, wo
Project.mantisID = 501,
Project.user = „username “
Project.password = "passwd",

etc ...

ich weiß sprin g kann diese Datei mit einigen @Value-Annotationen lesen, aber wie kann ich diese verwenden, um zu bekommen, was ich brauche?

+0

Ich sehe keinen Code in der YAML-Datei, es gibt nur Skalare und Zuordnungen. Fragen Sie, wie Sie die YAML-Datei neu schreiben können? Wenn nicht, dann wird [Tag: yaml] unangemessen angewendet – Anthon

+0

Ich meinte "Knoten", "Mapping". Ich kenne das richtige Wort nicht. Ich meinte Element. –

+0

Elemente in YAML kommen nur in Sequenzen vor, Sie haben keine Elemente in Ihrer YAML. Wenn Sie die korrekte YAML-Terminologie nicht kennen (was häufig vorkommt, wenn Sie nur eine Sprache/Parser verwenden), dann benennen Sie zumindest die Namen nach Ihrer Sprache ('Java node'). Und wenn Sie bemerkt haben, dass Sie etwas falsches geschrieben haben, machen Sie die Frage für zukünftige Leser besser, indem Sie sie bearbeiten und korrigieren. ** Ihr ** Problem könnte gelöst sein, aber wir versuchen hier eine qualitativ hochwertige Q & A-Site aufzubauen. – Anthon

Antwort

1

Sie können @ConfigurationProperties Annotation verwenden, um Ihre Konfiguration zu einer Bean zuzuordnen, dann können Sie Ihre Bean irgendwo injizieren und diese Eigenschaften abrufen.

Um dies zu tun, erstellen Sie zuerst eine Klasse, die die Datenstruktur in Ihrer Konfiguration darstellt. Dann notieren Sie es mit @ConfigurationProperties und @Configuration Annotationen.

@Configuration 
@ConfigurationProperties 
public class MyConfig { 

    private final Map<String, Project> myConfig = new HashMap<>(); 

    public Map<String, Project> getMyConfig() { 
     return myConfig; 
    } 

    public static class Project { 

     private String mantisID; 
     private String password; 
     private String user; 

     // Getters and setters... 
    } 
} 

Hinweis die Getter und Setter in der Project Klasse erforderlich sind. Beachten Sie auch, dass die Benennung von Gettern und Setter hier wichtig ist.

Nachdem Sie Setup diese Klasse haben, können Sie es überall in Ihrem Projekt injizieren und Zugriff auf seine Eigenschaften.

@Service 
public class SomeService { 

    private final Map<String, MyConfig.Project> projects; 

    @Autowired 
    public SomeService(MyConfig config) { 
     this.projects = config.getMyConfig(); 

     projects.get("projectOne").getMantisID(); 
     projects.get("projectTwo").getPassword(); 
    } 
} 

Sie können mehr darüber lesen here.

+0

Ok, vielen Dank für die Antwort. Ich war auf der Online-Ressource, die du zur Verfügung gestellt hast, aber war nicht wirklich in der Lage, meinen Weg aus diesem^zu erraten. Ich habe eine andere Frage, wie mache ich, wenn ich die Projektliste innerhalb einer foreach wollen. Stellen Sie sich vor, mein Benutzer fügt ein "projectThree" in die .yml-Datei ein. Ich muss automatisch alle Projekte unter myConfig: -Eintrag abrufen. –

+0

Wenn ich Ihre Frage richtig verstanden habe, können Sie alle Map-Werte mit der Methode '.values ​​()' oder '.entrySet()' abrufen und sie iterieren, z. 'projects.values ​​(). forEach (p -> {/ * Mach etwas mit deinem Projekt. * /});'. – Edd

0

Nur um zu beenden, antwortete ich mir auf meine zweite Frage. Dies ist, was mein Dienst wie jetzt aussieht:

@Service 
public class MantisProjectService { 

    private final Map<String, MantisProjectConfiguration.Project> projects; 

    private List<MantisProjectConfiguration.Project> mantisProjects = new ArrayList<>(); 

    @Autowired 
    public MantisProjectService(MantisProjectConfiguration mantisProjectConfiguration) 
    { 
     this.projects = mantisProjectConfiguration.getMantisProjectConfiguration(); 

     for (Map.Entry<String, MantisProjectConfiguration.Project> project : projects.entrySet()) 
     { 
      MantisProjectConfiguration.Project mantisProject = project.getValue(); 
      mantisProject.setName(project.getKey()); 
      mantisProjects.add(mantisProject); 
     } 
    } 

    public List<MantisProjectConfiguration.Project> getMantisProjects() 
    { 
     return mantisProjects; 
    } 

} 

Es gibt eine Liste aller Projekte. Und es ist großartig! =)