【问题标题】:NoUniqueBeanDefinitionException: No qualifying bean of type 'AppProperties' available: expected single matching bean but found 3NoUniqueBeanDefinitionException:没有“AppProperties”类型的合格 bean 可用:预期单个匹配 bean,但找到 3
【发布时间】:2021-06-14 20:06:46
【问题描述】:

我正在尝试从 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);
    }

【问题讨论】:

    标签: java spring spring-boot java-annotations


    【解决方案1】:

    您不应该在AppProperties(可能是一个抽象类)上添加任何注释。从它继承的类只需要@ConfigurationProperties(prefix = "..")@Component 或者它们也可以通过另一个配置类的@EnableConfigurationProperties 来启用。

    当您注入时 - 具体说明您想要注入的配置属性 - 通过指定类型 - 就像您在示例中所做的那样,或者通过在注入点的参数中添加 @Qualifier("bean-name")

    Spring Boot 开箱即用配置 application.properties 属性源。

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 2016-04-12
      • 2017-12-11
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 2015-11-13
      相关资源
      最近更新 更多