我在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注释来读取这个文件,但我怎样才能使用它来获得我需要的东西?
答案 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。它太棒了! =)