从spring-boot获取属性地图
问题描述:
我有这样的问题:我的应用程序与其他应用程序一起工作。他们每个人都有一些独特的属性 - templateProject-id。所以,application.properties
看起来从spring-boot获取属性地图
mine.application.basic-project-id.application_1=10200
mine.application.basic-project-id.application_2=10202
mine.application.basic-project-id.application_3=10001
我不想存储环境对象在我的服务类。只有Map<String, Long>
(配对名称,project_id) 因此,从该示例中应该包含配对("application_1", 10200L), ("application_2",10202L), ("application_3",10001")
。
现在我存储Environment
和应用程序名称我每次构建属性名称并检索值。
String projectIdPropertyName = String.format("mine.application.basic-project-id.%s", applicationDescriptor.getName());
String softwareBasicProjectId = Long.valueOf(environment.getProperty(projectIdPropertyName));
答
这应该工作
@ConfigurationProperties("mine.application")
public class ApplicationProperties {
private Map<String,Long> basicProjectId = new HashMap<>();
public Map<String,Long> getBasicProjectId() {
return basicProjectId;
}
}
@SpringBootApplication
@EnableConfigurationProperties(ApplicationProperties.class)
public class YourApp { .... }
然后你需要的地方的东西,只是注入ApplicationProperties
。如果启用Spring Boot configuration meta-data annotation processor to your build,您还将获得该密钥的内容帮助(以及您在该课程中添加的任何其他密钥)。
'basicProjectId'是不是总是空的? –
在我的服务中提问之前,我尝试了相同的逻辑,Map终于是空的了。 我试过你的答案,它的工作原理。 Magic – Solorad
嗯,我在没有尝试的情况下编写了代码,所以我很高兴它。您需要将此代码与您的代码进行比较,以了解您的问题。 –