Google App Engine标准Java 11中的Spring Boot配置文件-gcloud

问题描述

我正在通过Github动作部署我的spring boot应用程序。这样,我就有了使用gcloud执行应用程序部署以将我的应用程序部署到Google App Engine标准的管道。我已经创建了配置文件,我想将其注入以在运行时启动应用程序

简而言之:如何使用gcloud部署App Engine标准Java 11应用程序并支持spring概要文件

部署命令

app deploy src/main/appengine/app-dev.yaml --version=1

配置文件定义

<profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <ACTIVE_PROFILE>dev</ACTIVE_PROFILE>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <ACTIVE_PROFILE>prod</ACTIVE_PROFILE>
            </properties>
        </profile>
    </profiles>

<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <profiles>
                        <profile>${ACTIVE_PROFILE}</profile>
                    </profiles>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>2.3.0</version>
                <configuration>
                    <projectId>${gcloud-projectId}</projectId>
                    <version>1</version>
                </configuration>
            </plugin>
        </plugins>
    </build>

app-dev.yaml文件

 
runtime: java11
env: standard
instance_class: B4_1G
handlers:
  - url: .*
    script: auto
    secure: always
    redirect_http_response_code: 301
basic_scaling:
  max_instances: 5
  idle_timeout: 60m
env_variables:
  ACTIVE_PROFILE: dev

Application.yaml文件

spring:
  profiles:
    active: @ACTIVE_PROFILE@

解决方法

仅通过在app.yaml文件中包含spring_profiles_active,即可在Google App Engine标准Java 11的dev spring配置文件中运行我的应用程序。

env_variables:
 spring_profiles_active: "dev"
,

这似乎是由于App Engine需要为您的应用提供入口点。

某些框架(以及Spring Boot)也会构建可执行的uber JAR文件。发生这种情况时,运行时将通过运行Uber JAR应用程序来启动您的应用程序。

因此,您需要一个App Engine将用于其内容的入口点。应该在您的app.yaml中定义,如下所示:

runtime: java11
entrypoint: java -Xmx64m -jar YOUR-ARTIFACT.jar

示例YOUR-ARTIFACT.jar应用程序jar必须满足以下条件:

  • 与您的app.yaml文件位于根目录中。
  • 在其META-INF / MANIFEST.MF元数据文件中包含一个Main-Class条目。
  • (可选)包含一个Class-Path条目,其中包含其他从属jar的相对路径的列表。这些将自动与应用程序一起上传。

Source