将 Spring 启动部署到 Google App Engine 灵活环境时出现错误 404



我将 Spring 启动应用程序部署到 google App Engine Flexible env 时遇到问题。 我只想在 GAE 灵活的环境中部署,因为我已经在上面运行了一些服务(在同一个 gcp 项目中(。所以我想把它部署为一个新的单独服务,我可以配置调度文件来运行微服务系统。

Exception in thread "main" java.lang.IllegalStateException: No Available Context
at com.google.cloud.runtimes.jetty9.DeploymentCheck.lifeCycleStarted(DeploymentCheck.java:46)
at org.eclipse.jetty.util.component.AbstractLifeCycle.setStarted(AbstractLifeCycle.java:179)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1511)
at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1438)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1437)

我在这篇文章之后尝试了解决方案 码头无法在应用程序引擎灵活中启动弹簧启动应用程序

但还没有成功。

我的pom.xml文件在下面:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source> <!-- REQUIRED -->
<maven.compiler.target>${java.version}</maven.compiler.target> <!-- REQUIRED -->
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>tomcat-juli</artifactId>
</exclusion>
</exclusions>
</dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>web-socket</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<mainClass>com.kevin.SpringJqgridApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.6.v20170531</version>
</plugin>
<!-- START plugin -->
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
</plugin>
<!-- END plugin -->
</plugins>
</build>

任何人都可以帮助解决此问题吗? 谢谢。

我遇到了几次同样的问题,有一些潜在的解决方案:

  1. 您是否有一个看起来像这样的目录/文件结构:webapp/WEB-INF/appengine-web.xml?如果您在那里有该文件,并且正在使用 maven 插件进行部署,它可能会尝试按标准部署并导致抛出 IllegalStateException 错误。解决方案:完全删除webapp目录(它仅用于 AppEngine 标准配置(。就个人而言,这是我今天早上收到的非法状态异常的解决方案。

  2. 我在另一个应用程序上遇到了同样的问题,解决方案是确保您在AppEngine的Spring Boot应用程序中拥有Jetty所需的ServletInitializer。在此处查看更多信息。

  3. 您确信 Spring Boot 应用程序可以正常运行吗?当未能提供必要的环境变量时,我收到了此错误,导致应用程序尝试运行时出现问题。一个(工作(示例可能是这样的,确保将相应的环境变量添加到 app.yaml:

app.yaml:

env_variables: SPRING_PROFILES_ACTIVE: "qa"

应用程序属性:

spring.profiles.active="${SPRING_PROFILES_ACTIVE}"

对于这两种情况,我都没有包括弹簧启动码头依赖项,而是我的 build.gradle 看起来像这样:

compile(group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1')
compile(group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.0.2.RELEASE') {
// GAE runs on Jetty, not Tomcat, must manually disable
exclude(group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat')
}
compile(group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.0.5.RELEASE')
compile(group: 'com.google.appengine', name: 'appengine-api-1.0-sdk', version: '1.9.63')
compile(group: 'org.projectlombok', name: 'lombok', version: '1.18.2') {
exclude(group: 'org.slf4j', module: 'jul-to-slf4j')
}

最新更新