2016-07-06 70 views
1

我有这样的问题:我的应用程序与其他应用程序一起工作。他们每个人都有一些独特的属性 - 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)); 

回答

2

这应该工作

@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,您还将获得该密钥的内容帮助(以及您在该课程中添加的任何其他密钥)。

+0

'basicProjectId'是不是总是空的? –

+0

在我的服务中提问之前,我尝试了相同的逻辑,Map终于是空的了。 我试过你的答案,它的工作原理。 Magic – Solorad

+0

嗯,我在没有尝试的情况下编写了代码,所以我很高兴它。您需要将此代码与您的代码进行比较,以了解您的问题。 –