在 Google App Engine 中部署 Spring 启动 gradle 应用程序
Deploy Spring boot gradle app in Google App Engine
我搜索了 教程 以使用 [=30= 部署 Spring 启动应用程序 ]。我找不到任何资源来解释这样做的过程。
谁能指导我这个过程?
当我的项目 运行 在我的机器上本地运行时,我的项目就像一个魅力。但我想在 Google 应用引擎的灵活 Java 环境中部署。
Thanks, in advance.
我的build.gradle看起来像这样
buildscript {
ext {
springBootVersion = '2.0.4.RELEASE'
jwtVersion = '3.4.0'
appEngineVersion = '1.9.56'
appEngineGradleToolsVersion = '1.3.4'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile("org.springframework.boot:spring-boot-starter-security")
// JPA Data (We are going to use Repositories, Entities, Hibernate, etc...)
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
// Use MySQL Connector-J
compile 'mysql:mysql-connector-java'
implementation "com.auth0:java-jwt:${jwtVersion}"
runtime('org.springframework.boot:spring-boot-devtools')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
Spring Google App Engine 标准启动(Java 8)
此示例演示了如何在 Google App Engine 上部署 Spring 启动应用程序。
有关更详细的说明,请参阅 Google App Engine standard - documentation。
请参阅 Using Cloud SQL for MySQL 以了解如何使用 mysql
- Java 8
- Maven(至少3.5)
- Google Cloud SDK(又名 gcloud 命令行工具)
设置
下载并初始化Cloud SDK
gcloud init
在当前 Google Cloud 项目中创建一个 App Engine 应用程序
gcloud app create
行家
运行本地
mvn appengine:run
要使用访问权限:http://localhost:8080/
正在部署
mvn appengine:deploy
要使用访问权限:https://YOUR-PROJECT-ID.appspot.com
测试
mvn verify
在您添加/修改源代码 (src/main/java/...
) 时,添加 unit testing 非常有用
到(src/main/test/...
)。以下资源非常有用:
有关详细信息,请参阅
Java App Engine 文档。
将 Spring 引导应用程序转换为 App Engine 标准的步骤
使用WAR包装
您必须使用 WAR 打包才能部署到 Google App Engine Standard。
如果您从 start.spring.io 生成 Spring 引导项目,
确保你切换到初始化程序站点的完整版本视图,并且select WAR
包装。
如果您有现有的 JAR
打包项目,您可以通过以下方式将其转换为 WAR
项目:
1. 在pom.xml
中,将<packaging>jar</packaging>
改为<packaging>war</packaging>
1. 创建一个新的 SpringBootServletInitializer
实现:
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(YourApplication.class);
}
}
移除Tomcat启动器
Google App Engine Standard 将您的 WAR
部署到 Jetty 服务器中。 Spring 启动器
默认包括 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 标准插件:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
</plugin>
此插件用于运行本地开发服务器以及部署应用程序
进入 Google App Engine。
添加 App 引擎配置
添加一个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 中 运行ning 应用程序需要此配置。
将 JUL 排除到 SLF4J 桥
Spring Boot 的默认日志记录桥与 Jetty 的日志系统冲突。
为了能够捕获 Spring Boot 启动日志,您需要排除
org.slf4j:jul-to-slf4j
依赖。最简单的方法是
将依赖范围设置为 provided
,这样它就不会包含在
WAR
文件:
<!-- Exclude any jul-to-slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<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>
我搜索了 教程 以使用 [=30= 部署 Spring 启动应用程序 ]。我找不到任何资源来解释这样做的过程。
谁能指导我这个过程?
当我的项目 运行 在我的机器上本地运行时,我的项目就像一个魅力。但我想在 Google 应用引擎的灵活 Java 环境中部署。
Thanks, in advance.
我的build.gradle看起来像这样
buildscript {
ext {
springBootVersion = '2.0.4.RELEASE'
jwtVersion = '3.4.0'
appEngineVersion = '1.9.56'
appEngineGradleToolsVersion = '1.3.4'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile("org.springframework.boot:spring-boot-starter-security")
// JPA Data (We are going to use Repositories, Entities, Hibernate, etc...)
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
// Use MySQL Connector-J
compile 'mysql:mysql-connector-java'
implementation "com.auth0:java-jwt:${jwtVersion}"
runtime('org.springframework.boot:spring-boot-devtools')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
Spring Google App Engine 标准启动(Java 8)
此示例演示了如何在 Google App Engine 上部署 Spring 启动应用程序。
有关更详细的说明,请参阅 Google App Engine standard - documentation。 请参阅 Using Cloud SQL for MySQL 以了解如何使用 mysql
- Java 8
- Maven(至少3.5)
- Google Cloud SDK(又名 gcloud 命令行工具)
设置
下载并初始化Cloud SDK
gcloud init
在当前 Google Cloud 项目中创建一个 App Engine 应用程序
gcloud app create
行家
运行本地
mvn appengine:run
要使用访问权限:http://localhost:8080/
正在部署
mvn appengine:deploy
要使用访问权限:https://YOUR-PROJECT-ID.appspot.com
测试
mvn verify
在您添加/修改源代码 (src/main/java/...
) 时,添加 unit testing 非常有用
到(src/main/test/...
)。以下资源非常有用:
有关详细信息,请参阅 Java App Engine 文档。
将 Spring 引导应用程序转换为 App Engine 标准的步骤
使用WAR包装
您必须使用 WAR 打包才能部署到 Google App Engine Standard。
如果您从 start.spring.io 生成 Spring 引导项目, 确保你切换到初始化程序站点的完整版本视图,并且select WAR 包装。
如果您有现有的 JAR
打包项目,您可以通过以下方式将其转换为 WAR
项目:
1. 在pom.xml
中,将<packaging>jar</packaging>
改为<packaging>war</packaging>
1. 创建一个新的 SpringBootServletInitializer
实现:
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(YourApplication.class);
}
}
移除Tomcat启动器
Google App Engine Standard 将您的 WAR
部署到 Jetty 服务器中。 Spring 启动器
默认包括 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 标准插件:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
</plugin>
此插件用于运行本地开发服务器以及部署应用程序 进入 Google App Engine。
添加 App 引擎配置
添加一个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 中 运行ning 应用程序需要此配置。
将 JUL 排除到 SLF4J 桥
Spring Boot 的默认日志记录桥与 Jetty 的日志系统冲突。
为了能够捕获 Spring Boot 启动日志,您需要排除
org.slf4j:jul-to-slf4j
依赖。最简单的方法是
将依赖范围设置为 provided
,这样它就不会包含在
WAR
文件:
<!-- Exclude any jul-to-slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<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>