【发布时间】:2021-11-03 15:37:27
【问题描述】:
我正在尝试应用 @ConfigurationProperties 注释以从 application.yml 文件获取映射到代码中我需要它的位置。
这是我目前的代码:
application.yml
repository:
type:
big: big
small: small
medium: medium
to:
database:
something: "STRING"
configuration.java
@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
我在这里错过了什么?
【问题讨论】:
-
你不见了
@EnableConfigurationProperties -
我在配置类上有它。我用它更新了我的问题
-
@EnableConfigurationProperties(DatabaseTypeMapping.class),我猜 -
我添加了,现在出现如下错误:
No ConfigurationProperties annotation found on 'repository.SnowflakeRepositoryConfig$DatabaseTypeMapping'. -
@ConfigurationProperties应该继续类声明。
标签: java spring-boot configurationproperties