Spring + google cloud:没有可用的“com.google.cloud.storage.Storage”类型的合格bean

Posted

技术标签:

【中文标题】Spring + google cloud:没有可用的“com.google.cloud.storage.Storage”类型的合格bean【英文标题】:Spring + google cloud: No qualifying bean of type 'com.google.cloud.storage.Storage' available 【发布时间】:2020-05-24 16:00:01 【问题描述】:

我正在尝试将 spring 库用于谷歌云 API:

spring-cloud-gcp-starter-vision

但是 Spring Application Context 加载失败并报错:

原因:org.springframework.beans.factory.UnsatisfiedDependencyException:在类路径资源 [org/springframework/cloud/gcp/autoconfigure/vision/CloudVisionAutoConfiguration$VisionOcrConfiguration.class] 中定义名称为“documentOcrTemplate”的 bean 创建错误:不满意通过方法 'documentOcrTemplate' 参数 1 表达的依赖关系;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“com.google.cloud.storage.Storage”类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:...

我不知道如何处理它,因为它都是谷歌的代码,在我自己的代码中没有。

仅供参考,这是我尝试使用此库的方式:

@Service
public class OCRServiceImpl implements OCRService 

    private static Log LOGGER = LogFactory.getLog(OCRServiceImpl.class);

    @Autowired
    private CloudVisionTemplate cloudVisionTemplate;

    @Autowired
    private ResourceLoader resourceLoader;

【问题讨论】:

奇怪的是,它在本地工作,一旦放在 GCP 中的容器上抛出 UnsatisfiedDependencyException,我检查了 CloudVisionTemplate 的构造函数,它有 ImageAnnotatorClient。扫描这个包裹怎么样? 【参考方案1】:

您需要将 both spring-cloud-gcp-starter-vision 和 spring-cloud-gcp-starter-storage 添加到您的依赖项中。

见cloud-vision-ocr-dependencies。

【讨论】:

【参考方案2】:

你设置 spring.cloud.gcp.vision 了吗?

@ConfigurationProperties("spring.cloud.gcp.vision")

看看@CloudVisionAutoConfiguration

    @Bean
    @ConditionalOnMissingBean
    public CloudVisionTemplate cloudVisionTemplate(ImageAnnotatorClient imageAnnotatorClient) 
        return new CloudVisionTemplate(imageAnnotatorClient);
    

看起来你缺少属性配置!!!

【讨论】:

以上是关于Spring + google cloud:没有可用的“com.google.cloud.storage.Storage”类型的合格bean的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud:Zuul 抛出“负载均衡器没有可用于客户端的服务器”

带有 Spring Cloud 和 Eureka java.lang.IllegalStateException 的功能区:没有可用于 localhost 的实例

无法在 Spring Data Cloud Spanner 中将 java.sql.Timestamp 转换为 com.google.cloud.Timestamp

Spring Cloud 服务查找错误:负载均衡器没有可供客户端使用的服务器

Google Cloud Spring Boot InvocationTargetException

为 Google PubSub 暂停 Spring Cloud StreamListener