Google App Engine标准环境 - 未找到控制器方法 - Spring Boot应用程序

时间:2018-01-09 14:45:06

标签: java google-app-engine spring-boot

我试图在Google App Engine(标准环境)上部署Spring Boot应用程序。起初我从这个很好的教程https://springframework.guru/spring-boot-web-application-part-4-spring-mvc/

克隆了示例应用程序

例如,我调用了http://localhost:8080/products,并显示了带有数据的模板。

所以一切都没有问题,我能够在本地调用所有控制器方法。然后我决定将其部署在GAE上进行实验。我根据这里https://github.com/GoogleCloudPlatform/getting-started-java/tree/master/appengine-standard-java8/springboot-appengine-standard

的说明调整了pom.xml

这意味着我排除了Tomcat依赖关系,将包装从jar更改为war,创建了appengine-web.xml文件等。下一步,我在GAE控制台中创建了GAE项目,并将APP ID复制到appengine-web.xml中。然后我运行了mvn clean package并在目标文件夹中创建了war。最后,我开始使用GAE部署,它也顺利进行,没有错误。

我的应用现已部署在此网址https://20180109t135551-dot-oe-gae-test.appspot.com/

如果你试试,你会在浏览器中看到Hello World。但是,如果我尝试调用/ product控制器方法,就像这样https://20180109t135551-dot-oe-gae-test.appspot.com/products我得到"找不到"错误。

您能否就我应该调用控制器方法的URL给出建议?我是否忘记实现web.xml servlet映射之类的东西?或者是一些特定的Spring Boot - Google App Engine问题?

我会感激任何提示。

提前谢谢大家

1 个答案:

答案 0 :(得分:2)

关注this steps后,the code转换为以下内容:

  1. 在pom.xml中,将<packaging>jar</packaging>更改为<packaging>war</packaging>

  2. 在包guru.springframework中添加此类:

  3. 代码:

    package guru.springframework;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringBootWebApplication {
    
    public static void main(String[] args) {
            SpringApplication.run(SpringBootWebApplication.class, args);
        }
    }    
    
    1. 删除Tomcat Starter:
    2. 在POM中找到这个依赖项:

          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </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>
      
      1. 排除Jetty依赖项并包含Servlet API依赖项:

        <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>

      2. 添加App Engine标准插件:

        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>appengine-maven-plugin</artifactId>
            <version>1.3.1</version>
        </plugin>
        
        1. appengine-web.xml中添加一个名为src/webapp/WEB-INF的文件,其中包含以下内容:
        2. <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <threadsafe>true</threadsafe> <runtime>java8</runtime> </system-properties> </appengine-web-app>

          1. 通过在pom中找到此依赖项来将JUL排除到SLF4J Bridge:
          2. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

            并以这种方式修改:

                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-data-jpa</artifactId>
                    <exclusions>
                        <exclusion>
                            <groupId>org.slf4j</groupId>
                            <artifactId>jul-to-slf4j</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
            
            1. 避免内存不足错误:
            2. src/main/resources中添加logging.properties文件:

              .level = INFO
              

              并在src/main/webapp/WEB-INF/appengine-web.xml内粘贴此内容:

              <system-properties>
                  <property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties" />
              </system-properties>
              

              修改

              对于步骤37,您还可以转到项目资源管理器(如果您正在使用Eclipse)并导航到库 - &gt; Maven依赖并单独选择每个库(在我的案例中为jul-to-slf4j-1.7.25spring-boot-starter-tomcat-1.5.3.RELEASE)。右键单击每个库并转到 Maven - &gt;排除Maven工件 ...然后点击确定。这将对POM产生与编辑相同的效果。