Есть несколько проблем:
Стандартная среда GCP предоставляет Jetty вместо Tomcat
Google исправил app.yaml
/ appengine-web.xml
проблемы в более поздних версиях плагина
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.3.0</version>
</plugin>
и в конце вашего <dependencyManagement/>
импорта:
<!-- org.springframework.cloud:spring-cloud-gcp-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>1.2.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
и преимущество обновленных версий в вашем <dependencies/>
соответственно.
Я предлагаю вам упаковать ваше приложение в отдельный JAR и включить зависимость в свой pom.xml
, например:
<dependency>
<groupId>GROUP</groupId>
<artifactId>ARTIFACT</artifactId>
<version>VERSION</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
Где GROUP : ARTIFACT: VERSION - это фактические координаты Maven JAR вашего приложения.
В папке WEB-INF
добавьте appengine-web.xml
(что-то вроде):
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>GROUP</application>
<service>ARTIFACT</service>
<version>VERSION</version>
<runtime>java8</runtime>
<basic-scaling>
<max-instances>1</max-instances>
<idle-timeout>5m</idle-timeout>
</basic-scaling>
<instance-class>B1</instance-class>
<threadsafe>true</threadsafe>
<sessions-enabled>true</sessions-enabled>
<env-variables>
<env-var name="SPRING_PROFILES_ACTIVE" value="gcp,mysql"/>
</env-variables>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
</appengine-web-app>
Где GROUP, ARTIFACT и ВЕРСИЯ соответствует идентификатору группы артефакта Maven, идентификатору артефакта и версии JAR, соответственно.
После обновления подключаемого модуля я обнаружил, что мне больше не нужен файл app.yaml
. Вам нужно будет включить logging.properties
:
# Set the default logging level for all loggers to WARNING
.level = WARNING
Наконец, переупакуйте банку GROUP: ARTIFACT: VERSION в свой POM (обратите внимание, что ${start-class}
должен быть определен для вашего приложения):
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>${start-class}</mainClass>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>
<profile>gcp</profile>
<profile>mysql</profile>
</profiles>
</configuration>
</plugin>
</plugins>
</build>
Используйте mvn clean package appengine:deploy
для развертывания. Эта статья содержит более подробную информацию.