![](/img/trans.png)
[英]Spring boot. The profit of using @ConfigurationProperties annotation
[英]How to use @ConfigurationProperties annotation in Spring Boot
我正在嘗試應用@ConfigurationProperties
注釋來從application.yml
文件中獲取一個映射到我需要它的代碼位置。
這是我到目前為止的代碼:
應用程序.yml
repository:
type:
big: big
small: small
medium: medium
to:
database:
something: "STRING"
配置文件
@Configuration
@EnableConfigurationProperties
public class SnowflakeRepositoryConfig {
@Bean
@ConfigurationProperties(prefix = "repository.type")
public DatabaseTypeMapping databaseTypeMapping() {
return new DatabaseTypeMapping();
}
public static class DatabaseTypeMapping {
public Map<Type, Type> typeMappingMigration;
public void setMapping(Map<Type, Type> typeMappingMigration) {
this.typeMappingMigration = typeMappingMigration; }
}
@Bean
@ConfigurationProperties(prefix = "repository.to.database")
public BrandToDatabaseProperties brandToDatabaseProperties() {
return new BrandToDatabaseProperties();
}
public static class BrandToDatabaseProperties {
public Map<Brand, String> mapping;
public void setMapping(Map<Brand, String> mapping) {
this.mapping = mapping;
}
}
在配置文件中,我將它應用到 serviceImpl 類,如下所示:
@Bean
public UserDataService getUserData(BrandToDatabaseProperties brandToDatabaseProperties, DatabaseTypeMapping databaseTypeMapping){
return new UserDataServiceImpl(brandToDatabaseProperties.mapping, databaseTypeMapping.typeMappingMigration);
}
在serviceImpl.java類中,我像這樣包含它:
public class UserDataServiceImpl implements UserDataService {
private final Map<Type, Type> typeMappingMigration;
private final Map<Brand, String> brandToDatabaseMapping;
public UserDataServiceImpl(Map<Brand, String> brandToDatabaseMapping, Map<Type, Type> typeMappingMigration) {
this.brandToDatabaseMapping = Collections.unmodifiableMap(brandToDatabaseMapping);
this.typeMappingMigration = Collections.unmodifiableMap(typeMappingMigration);
}
當我嘗試啟動我的應用程序時,出現以下錯誤:
Failed to instantiate [service.UserDataService]: Factory method 'getUserData' threw exception; nested exception is java.lang.NullPointerException
我在這里缺少什么?
您不需要聲明DatabaseTypeMapping
類型的 bean。 將ConfigurationProperties
注釋移動到類,並讓組件掃描拾取它。 或者,您可以在EnableConfigurationProperties
注釋中指定類名。
我不能確定,但我認為ConfigurationProperties
不應該在方法上聲明,它在邏輯上沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.