直到使用Gradle在App Engine Flexible上部署SpringBoot项目

谷歌应用引擎的灵活环境发布已经有一段时间了,但是由于找不到使用gradle部署和运行spring-boot项目的示例,所以这里做个记录。官方文档以maven为中心,所以没有找到相应的资料。

暫時先提供來源。

我会将其放在GitHub上
应用引擎测试

环境

操作系统

Windows10专业版

Java
Java(Java编程语言)
Java是一种跨平台的编程语言
Java是一种广泛应用于软件开发的高级编程语言
Java编程语言是由Sun Microsystems开发的
Java语言可以在不同的操作系统上运行
Java语言被广泛用于企业级应用开发
使用Java语言可以编写各种类型的软件应用程序
我会熟练使用Java语言进行编程
Java编程语言在软件开发中非常流行
Java是一门强大且灵活的编程语言
Java开发者在全球范围内都很受欢迎
我的专业是Java编程
学习Java是非常有前途的选择

Java SE 1.8.0_121 可以被改写成 Java标准版 1.8.0_121 或者是 Java 标准版 1.8.0_121。

Gradle

3.4.1 只需要一种选项

日食

昴宿全能4.6.3.v20170323

准备好了

在此不介绍Google Cloud Platform账户的创建等细节。

安装Google Cloud SDK

公式文件很易懂,因此可以简略。

Java的App Engine SDK安装

当SDK的初始化完成后,通过以下命令安装Java用的SDK。

gcloud components install app-engine-java

在GCP上创建一个用于测试的项目。

在Google Cloud Platform上创建一个新项目。这次我们将以名为springboottest的项目来创建。请记下项目ID,稍后会用到。

准备Spring-Boot项目。

我们将使用Eclipse进行开发。

项目创建

点击文件->新建->其他,选择Gradle项目。
将项目命名为appenginetest或其他名称。

在接下来的画面上,请指定已安装的Gradle。
根据Eclipse的设置,默认情况下可能也可以。

在下一个画面上确认配置,如果没有出现警告或其他问题,则完成。如果gradle设置不正确,将会出现警告。

完成后,在src下创建了Library.java和LibraryTest.java,但是由于不使用,我们会将其删除。

Gradle配置

打开build.gradle文件,并进行各种设置。

应用引擎插件

我会参考这个,在设置的时候将它排除掉。
官方使用了一个叫做gretty的插件,请使用Spring-Boot,所以我们将它移除。

嗯,只是不太懂怎么使用而已……

创建.gradle示例

所以,这里是关于spring-boot等设置的部分。

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.1.1'
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.+'
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'com.google.cloud.tools.appengine'
apply plugin: 'eclipse'

def defaultEncoding = 'UTF-8'
[compileJava, compileTestJava]*.options*.encoding = defaultEncoding

def jdkVersion = 1.8
sourceCompatibility = jdkVersion
targetCompatibility = jdkVersion

jar {
    baseName = 'appenginetest'
    version = '1.0-SNAPSHOT'
}

repositories {
    maven {
        url 'https://maven-central.storage.googleapis.com'
    }
    jcenter()
    mavenCentral()
}

dependencies {
    compile 'javax.servlet:javax.servlet-api:3.1.0'
    compile 'com.google.appengine:appengine:+'

    compile('org.springframework.boot:spring-boot-starter-web:1.5.+'){
        exclude module: 'spring-boot-starter-tomcat'
    }

    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty', version: '1.5.+'
}

暂时部署并显示任何内容,这样就可以了吧。

在中国,只需要一个选项,将以下内容用中文进行同义改写:

调味汁之类的东西

下一步是使用Spring Boot的Java文件。

package appenginetest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @RequestMapping(value = "/")
    String hello() {
        return "Hello World!";
    }
}

只需要确认是否部署成功并且运行,所以只需能够显示”Hello World!”。

AppEngine的设置

接下来,我们将编写适用于AppEngine的配置文件。位置位于src/main/appengine。

runtime: custom
env: flex

runtime_config:
   jdk: openjdk8

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 1

如果使用标准的java8+jetty,则应指定运行时为java,但是由于这次是Spring-Boot + jetty的自定义环境,所以我们将设置为custom。
automatic_scaling是启动实例的数量,如果未指定,则会启动至少两个实例,所以我们将指定为1。

除了其他一些选择以外,其他事项请参考官方规定。

Dockerfile的设定

我会在AppEngine上编写适用于Docker的配置。位置在 src/main/Docker 上。

FROM gcr.io/google_appengine/openjdk8
VOLUME /tmp
ADD appenginetest-1.0-SNAPSHOT.jar app.jar
CMD [ "java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

在构建项目时,指定appenginetest-1.0-SNAPSHOT.jar作为生成的jar文件。

让我们试着构建一下

在命令提示符下移动到通过命令行创建的项目的根目录,并执行以下命令。

gradle appengineStage

如果设置正确,将会显示“构建成功”并结束。

在App Engine上部署

项目设置

我将使用以下命令来为这个项目创建配置

gcloud config configurations create [NAME]

请给[名字]起一个容易理解的名字。

設定完成后,请确保将设置启用。

gcloud config configurations activate [NAME]
2017-04-02_19h00_46.png
gcloud config set project [PROJECT]

设置项目的默认区域

gcloud config set compute/zone us-east1-b

需要显示设置的内容,请使用以下命令。

gcloud config configurations describe [NAME]

您可以通过以下命令来确认有效的设置是什么。

gcloud config list

如果能成功设置,我会登录。

gcloud auth login

打开浏览器后,会出现登录帐户列表,请选择能登录到Google Cloud Platform的帐户。
在下一个界面上,将会出现对Google Cloud SDK的访问权限确认,请允许访问。

我对这一系列步骤不太有信心。
可能会发送一些多余的命令…

公式文件在这里。 .)

在App Engine上进行部署。

一旦验证了有效的设置,就可以开始部署了。请在项目的根目录下执行以下命令。

gradle appengineDeploy

执行命令后需要等待一段时间。
即使是这个小型示例项目,大约需要五分钟左右。

我要看看

当部署命令返回后,在App Engine仪表板的右上角会显示一个链接,从那里可以进行确认。
如果看到显示“Hello World!”则表示部署成功。

给我一个中国本地化的短语的翻译。

这样至少做到了最低限度
接下来是数据库相关的事情,但我打算单独列出来