[英]Spring Boot + cloud API deployment on heroku
我正在尝试在 heroku 上部署由 google 提供的简单应用程序: https : //github.com/GoogleCloudPlatform/java-docs-samples/tree/master/vision/spring-framework 。
我已经完成了此线程中的建议如何在 Heroku 上使用 Google API 凭据 json? . 但我仍然收到错误。 我什至不确定它的谷歌凭据错误还是其他什么。 仅用于记录应用程序在本地工作。
这是pom.xml文件,我已经进行了一些更改,因此它不是 github 项目的克隆
<project>
<modelVersion>4.0.0</modelVersion>
<properties>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
<spring.version>2.3.4.RELEASE</spring.version>
</properties>
<parent>
<groupId>com.google.cloud.samples</groupId>
<artifactId>shared-configuration</artifactId>
<version>1.0.20</version>
</parent>
<groupId>com.example.vision</groupId>
<artifactId>spring-framework</artifactId>
<name>Spring Framework with Cloud Vision Sample</name>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>1.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-vision</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.vision.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
视觉控制器类
/*
* Copyright 2019 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.vision;
import com.google.cloud.vision.v1.AnnotateImageResponse;
import com.google.cloud.vision.v1.EntityAnnotation;
import com.google.cloud.vision.v1.Feature.Type;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gcp.vision.CloudVisionTemplate;
import org.springframework.core.io.ResourceLoader;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
/**
* Code sample demonstrating Cloud Vision usage within the context of Spring Framework using Spring
* Cloud GCP libraries. The sample is written as a Spring Boot application to demonstrate a
* practical application of this usage.
*/
@RestController
public class VisionController {
@Autowired private ResourceLoader resourceLoader;
// [START spring_vision_autowire]
@Autowired private CloudVisionTemplate cloudVisionTemplate;
// [END spring_vision_autowire]
/**
* This method downloads an image from a URL and sends its contents to the Vision API for label
* detection.
*
* @param imageUrl the URL of the image
* @param map the model map to use
* @return a string with the list of labels and percentage of certainty
*/
@GetMapping("/extractLabels")
public ModelAndView extractLabels(String imageUrl, ModelMap map) {
// [START spring_vision_image_labelling]
AnnotateImageResponse response =
this.cloudVisionTemplate.analyzeImage(
this.resourceLoader.getResource(imageUrl), Type.LABEL_DETECTION);
Map<String, Float> imageLabels =
response
.getLabelAnnotationsList()
.stream()
.collect(
Collectors.toMap(
EntityAnnotation::getDescription,
EntityAnnotation::getScore,
(u, v) -> {
throw new IllegalStateException(String.format("Duplicate key %s", u));
},
LinkedHashMap::new));
// [END spring_vision_image_labelling]
map.addAttribute("annotations", imageLabels);
map.addAttribute("imageUrl", imageUrl);
return new ModelAndView("result", map);
}
@GetMapping("/extractText")
public String extractText(String imageUrl) {
// [START spring_vision_text_extraction]
String textFromImage =
this.cloudVisionTemplate.extractTextFromImage(this.resourceLoader.getResource(imageUrl));
return "Text from image: " + textFromImage;
// [END spring_vision_text_extraction]
}
}
带有日志的 Pastebin https://pastebin.com/fqQU5S4y
puedes intentar con el archivo de configuración de spring-boot y colocar esta configuración。
spring.cloud.gcp.credentials.location=classpath:archivoPermisos.json
spring.cloud.gcp.project-id=idproyecto
spring.cloud.gcp.vision.enabled=true
spring.cloud.gcp.core.enabled=true
苏尔特。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.