问题描述
我正在尝试从 application.properties 文件加载 api 键值,下面是类文件。我无法启动应用程序,因为它无法找到唯一的 bean。不知道我错过了什么。有人可以帮忙吗。
这是我们的 AppProperties.java
@Component
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = AppProperties.APP_PROPERTIES_PREFIX)
public class AppProperties {
public static final String APP_PROPERTIES_PREFIX = "bi";
private String accesstokenUri;
private String clientId;
private String clientSecret;
private String basicAuth;
private String apiKey;
//getters and setters
}
这是我们的 DiagnosticProperties.java
@Component
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "bi")
public class DiagnosticProperties extends AppProperties {
private String diagnosisUrl;
//getters and setters
}
这是我们的 ObservationProperties.java
@Component
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "bi")
public class ObservationProperties extends AppProperties {
private String observationUrl;
//getters and setters
}
这是我们的 DiagnosticServiceImpl.java
@Service
public class DiagnosticServiceImpl implements DiagnosticService {
private static final Logger LOGGER =
LoggerFactory.getLogger(ObservationServiceImpl.class);
private final WebClient webClient;
private final DiagnosticProperties diagnosticProperties;
public DiagnosticServiceImpl(final WebClient webClient,final DiagnosticProperties
diagnosticProperties) {
this.webClient = webClient;
this.diagnosticProperties = diagnosticProperties;
}
@Override
public Mono<DiagnosticResponse> getPatientDiagnosticDetails(final String uri) {
return diagnosticDetails(uri);
}
解决方法
您不应在 AppProperties
上添加任何注释(这可能是一个抽象类)。从它继承的类只需要 @ConfigurationProperties(prefix = "..")
和 @Component
或者它们也可以使用来自另一个配置类的 @EnableConfigurationProperties
启用。
当您注入时 - 请具体说明您要注入的配置属性 - 通过指定类型 - 就像您在示例中所做的那样,或者将 @Qualifier("bean-name")
添加到注入点的参数中。
Spring Boot 开箱即用地配置 application.properties
属性源。