Вы должны преобразовать ваше приложение в конфигурацию App Engine. Если вы используете стандарт GOOGLE APP ENGINE, выполните эти шаги :
Используйте упаковку WAR
Для развертывания в Google App Engine Standard необходимо использовать упаковку WAR.
Если вы сгенерировали проект Spring Boot из start.spring.io
, убедитесь, что вы переключаетесь в режим полной версии сайта инициализатора и выбираете WAR-упаковку.
Если у вас есть проект упаковки JAR
, вы можете преобразовать его в проект WAR
следующим образом:
В pom.xml измените <packaging>jar</packaging>
на <packaging>war</packaging>
Создание новой реализации SpringBootServletInitializer:
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(YourApplication.class);
}
}
Удалить Tomcat Starter
Google App Engine Standard развертывает вашу WAR на сервере Jetty. Стартер Spring Boot включает Tomcat по умолчанию. Это приведет к конфликтам. Исключить зависимости Tomcat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
Не включать зависимости Jetty. Но вы должны включить зависимость Servlet API:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
Добавить стандартный плагин App Engine
В pom.xml
добавьте плагин App Engine Standard:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
</plugin>
Этот плагин используется для запуска локального сервера разработки, а также для развертывания приложения в Google App Engine.
Добавить конфигурацию ядра приложения
Добавить src/main/webapp/WEB-INF/appengine-web.xml
:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<version>1</version>
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
</appengine-web-app>
Эта настройка требуется для приложений, работающих в Google App Engine.
Исключить JUL для моста SLF4J
Мост журналирования Spring Boot по умолчанию конфликтует с системой журналирования Jetty. Чтобы иметь возможность записывать журналы запуска Spring Boot, необходимо исключить зависимость org.slf4j:jul-to-slf4j
. Самый простой способ сделать это состоит в том, чтобы установить область зависимостей, чтобы она не была включена в файл WAR:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
Ошибки нехватки памяти
С Spring Boot >= 1.5.6
вы можете столкнуться с нехваткой памяти при запуске. Пожалуйста, следуйте этим инструкциям, чтобы обойти эту проблему:
Внутри src/main/resources
, добавление logging.properties
файла с:
.level = INFO
Внутри src/main/webapp/WEB-INF/appengine-web.xml
, добавьте конфигурацию, которая указывает на новый файл logging.properties
.
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties"/>
</system-properties>