2016-07-06 61 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

嗯,我在沒有嘗試的情況下編寫了代碼,所以我很高興它。您需要將此代碼與您的代碼進行比較,以瞭解您的問題。 –