小编典典

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

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程序包,并在目标文件夹中创建了war。最终,我开始进行GAE部署,并且顺利进行且没有错误。

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

如果尝试,您将在浏览器中看到Hello World。但是如果我尝试像这样https://20180109t135551-dot-oe-gae-
test.appspot.com/products调用/ products控制器方法,则会收到“未找到”错误。

您能给我一些建议,告诉我应使用哪个URL的控制器方法吗?我是否忘记实现web.xml servlet映射之类的东西?还是某些特定的Spring Boot-
Google App Engine问题?

我将不胜感激。

谢谢大家


阅读 344

收藏
2020-05-30

共1个答案

小编典典

执行此步骤后,代码将转换为以下内容:

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

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

码:

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:

在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>

  1. 添加App Engine标准插件:

    <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>appengine-maven-plugin</artifactId>
    <version>1.3.1</version>
    

    1. 添加一个名为appengine-web.xmlsrc/webapp/WEB-INF与这些内容:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <threadsafe>true</threadsafe> <runtime>java8</runtime> </system-properties> </appengine-web-app>

7. 通过在pom中定位此依赖项来排除JUL到SLF4J桥:

<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. 避免内存不足错误:

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),然后导航到 图书馆- > Maven依赖与单独选择每个库(jul-to- slf4j-1.7.25spring-boot-starter-tomcat-1.5.3.RELEASE在我的情况)。右键单击每个库,然后转到
Maven- >排除Maven工件 …,然后单击“ 确定” 。这对POM的影响与编辑相同。

2020-05-30