J'ai lutté avec cela pendant environ une semaine et rien de ce que j'ai vu sur SO a travaillé pour moi. J'ai une API REST basée sur Spring Boot que j'essaie de déployer sur Google App Engine. Exécuter localement est très bien et quand je l'exécute sur l'émulateur GAE ça fonctionne bien aussi; Cependant, une fois que je déploie en utilisant mvn appengine:deploy
, je reçois une build réussie, mais lorsque j'essaie les points de terminaison, je ne reçois qu'un 502. Je ne suis pas sûr de l'endroit où se trouvent les logs, donc c'est vraiment un coup de pied dans mes fesses.Printemps Boot REST sur Google App Engine jette 502
Mon pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.admin</groupId>
<artifactId>admin-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- Exclude this for deployment only -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- other project dependencies -->
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
<!-- end other project specific dependencies -->
<!-- Dependencies provided during deployment -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- End dependencies for deployment -->
<!-- Dependencies for local -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-tomcat</artifactId> -->
<!-- <scope>provided</scope> -->
<!-- </dependency> -->
<!-- End dependencies for local -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<project>project-id-from-GAE-here</project
</configuration>
</plugin>
</plugins>
</build>
</project>
Ma classe d'application est une classe simple @SpringBootApplication
annoté. J'ai 2 contrôleurs avec l'annotation de @RestController
et des méthodes simples @RequestMapping
. L'un des contrôleurs REST concerne le point de terminaison /_ah/health
qui renvoie 200 car une constante mentionnée dans le message redémarre étant déclenchée par l'absence d'un point de terminaison d'intégrité.
J'ai simple application.yml pour mes injections de valeur et crée un fichier app.yaml
placé dans src/main/appengine
runtime: java
env: flexible
threadsafe: true
manual_scaling:
instances: 1
handlers:
- url: /.*
script: this field is required, but ignored
runtime_config:
jdk: openjdk8
Je suis à une perte complète à ce sujet. C'est mon premier déploiement de GAE avec plus d'espoir. (Je suis pas non plus en utilisant Docker encore depuis que je suis sur une machine Windows 10 qui se brise lorsque je charge Docker dessus.)
MISE À JOUR J'ai remarqué que j'avais oublié de mettre mon id projet sous le plugin maven . Une fois que je l'ai fait, j'ai eu des erreurs à propos de ne pas trouver le app.yaml. J'ai réalisé que depuis que j'utilise un environnement flexible, je n'avais pas besoin du fichier appengine-web.xml et mon fichier s'appelait app.yml plutôt que app.yaml. J'ai mis à jour ma question avec ceci et je reçois toujours un 502 après un déploiement réussi.
J'ai eu le même 502 quand j'ai utilisé la sécurité de printemps .. J'ai spécifié les ressources dans app.yaml pour mieux la machine. alors ça résout. – Evan