在春天获取application.yml的相关信息

时间:2016-12-15 16:14:34

标签: java spring spring-boot yaml

我在application.yml文件中添加了一些配置,我想从我的Java代码中读取它。

YAML文件中添加的节点如下所示:

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

我想要的是获取项目对象列表,其中

Project.mantisID = 501,
Project.user = "username",
Project.password = "passwd",

等...

我知道spring可以使用@Value注释来读取这个文件,但我怎样才能使用它来获得我需要的东西?

2 个答案:

答案 0 :(得分:1)

您可以使用@ConfigurationProperties注释将配置映射到Bean,然后您就可以将Bean注入任意位置并获取这些属性。

为此,首先创建一个表示配置中数据结构的类。然后使用@ConfigurationProperties@Configuration注释对其进行注释。

@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...
    }
}

注意 Project课程中需要getter和setter。另外请记住,getter和setter的命名在这里很重要。

设置完此类后,可以将其注入项目的任何位置并访问其属性。

@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();
    }
}

您可以阅读有关此here的更多信息。

答案 1 :(得分:0)

刚刚完成,我回答了自己的第二个问题。 这就是我现在的服务:

@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;
    }

}

它返回所有项目的List。它太棒了! =)