Java NonuniqueBeandDefinitionException:没有类型为';AppProperties';可用:需要单个匹配bean,但找到3个

Java NonuniqueBeandDefinitionException:没有类型为';AppProperties';可用:需要单个匹配bean,但找到3个,java,spring,spring-boot,java-annotations,Java,Spring,Spring Boot,Java Annotations,我正在尝试从application.properties文件加载api键值,下面是类文件。我无法启动应用程序,因为它无法找到唯一的bean。不知道我错过了什么。有人能帮忙吗 这是我们的AppProperties.java @Component @PropertySource("classpath:application.properties") @ConfigurationProperties(prefix = AppProperties.APP_PROPERTIES_PRE

我正在尝试从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
    }
    
@Component
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "bi")
public class DiagnosticProperties extends AppProperties {
    private String diagnosisUrl;
//getters and setters 
}
@Component
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "bi")
public class ObservationProperties extends AppProperties {
    private String observationUrl;
//getters and setters
}
这是我们的DiagnosticProperties.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
    }
    
@Component
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "bi")
public class DiagnosticProperties extends AppProperties {
    private String diagnosisUrl;
//getters and setters 
}
@Component
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "bi")
public class ObservationProperties extends AppProperties {
    private String observationUrl;
//getters and setters
}
这是我们的ObservationProperties.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
    }
    
@Component
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "bi")
public class DiagnosticProperties extends AppProperties {
    private String diagnosisUrl;
//getters and setters 
}
@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);
    }
@服务
公共类DiagnosticServiceImpl实现DiagnosticsService{
专用静态最终记录器=
getLogger(ObservationServiceImpl.class);
私人最终网络客户网络客户;
私有最终诊断属性DiagnosticProperties;
公共诊断服务MPL(最终网络客户端网络客户端,最终诊断属性
诊断属性){
this.webClient=webClient;
this.diagnosticProperties=diagnosticProperties;
}
@凌驾
公共Mono getPatientDiagnosticDetails(最终字符串uri){
返回诊断详细信息(uri);
}

您不应该在
AppProperties
上添加任何注释(这可能是一个抽象类)。从它继承的类只需要
@ConfigurationProperties(前缀=“…”)
@组件
,或者也可以使用另一个配置类中的
@EnableConfigurationProperties
启用它们

当您注入时-指定要注入的配置属性-可以像您在示例中那样指定类型,也可以向注入点上的参数添加
@Qualifier(“bean name”)

Spring Boot开箱即用配置
应用程序.properties
属性源