当前位置: 首页 > 知识库问答 >
问题:

将spring boot部署到google app engine flexible env时出现错误404

郤浩慨
2023-03-14

在将spring boot应用程序部署到google app engine flexible Env时,我面临着一个问题。我只想在GAE flexible env中部署,因为我已经在该环境上运行了一些服务(在同一个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)

在Jetty无法在appengine中灵活地启动Spring Boot应用程序后,我尝试了解决方案

下面是我的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个答案

乜裕
2023-03-14

我遇到过几次同样的问题,有几个潜在的解决方案:

>

  • 是否有类似以下内容的目录/文件结构:webapp/WEB-INF/appengine-web.xml?如果您有该文件,并且正在使用maven插件进行部署,它可能会尝试按标准部署,并导致抛出IllegalStateException错误。解决方案:完全删除webapp目录(它仅用于AppEngine标准配置)。就我个人而言,这是我今天早上收到的IllegalStateException的解决方案。

    我在另一个应用程序中也遇到了同样的问题,解决方案是确保您在AppEngine的Spring Boot应用程序中获得了Jetty所需的ServletInitializer。在这里看到更多。

    你有信心Spring Boot应用程序正确运行吗?当未能提供必要的环境变量时,我收到了这个错误,当应用程序试图运行时会导致问题。一个(有效的)示例可能如下所示,确保将相应的环境变量添加到app.yaml中:

    app.yaml:

    env_variables:spring_profiles_active:“qa”

    对于这两种情况,我都没有包含spring boot jetty依赖项,而是包含了我的构建。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')
    }
    

  •  类似资料:
    • 当我试图将包含一个简单的streamlit应用程序的Docker映像部署到Heroku时,我遇到了一些初期问题。我的问题是,部署后我无法访问我的Docker。经过仔细观察,我发现了以下错误: 错误R10(启动超时)- 我研究并了解到这是因为端口不可用,因为Heroku将动态分配端口号。 我在Dockerfile中添加了以下内容,以确保不会发生这种情况。 我现在可以看到网络URL和外部URL端口号是

    • 我已经将Shopizer war文件部署到Tomcat Elastic Beanstalk实例。我已经配置了一个mySQL数据库,据我所知,一切都应该是正确的。问题是当我尝试访问URL时,我收到了502错误。我知道Elastic Beanstalk在60后超时,所以我增加了超时限制,但仍然遇到了问题。 我在我的Catalina.out日志中注意到了这一点。我知道这只是一个警告,但它可能指向我的问题

    • 我试图在GlassFish server 4.1.0中部署ADF 12.1.3应用程序,但在部署过程中出现以下错误:将ADF essentials 3.1.2复制到GlassFish中的lib文件夹,ADF应用程序为12.1.3版本,GlassFish版本为4.1.0 部署过程中发生错误:部署应用程序时出现异常[MegatronApplicationOCS_07012015]:org.xml.sa

    • 从2.1.0迁移的Springboot版本2.2.1

    • 我已经设置和快速服务器上运行Firebase云功能。现在,我试图使用CLI使用“Firebase部署-仅函数”将其部署到Firebase,但每次都失败,说有一个意外的令牌。我怀疑在index.js文件中使用异步箭头函数有问题,但我不确定,我也需要它们来完成我的项目。 这是索引。js文件: 以下是我在尝试运行firebase deploy(仅限函数)时遇到的错误: ==部署到“homunculus-

    • 我有一个grails应用程序。我没有战争档案。我只有文件夹和文件。我正在尝试安装它,我面临着一些问题。我使用的步骤包括: > 我正在创建包含应用程序(文件和文件夹)的zip文件 我将使用Elastic Beanstalk向导,并使用TomaCat 7创建新环境。我正在使用所有默认配置。 当向导要求时,我上载包含应用程序的zip。最后,向导通知我应用程序安装正确,但当我试图查看正在运行的版本时,我会