gpt4 book ai didi

java - Google App Engine Standard env - 找不到 Controller 方法 - Spring Boot 应用程序

转载 作者:行者123 更新时间:2023-11-29 04:22:36 26 4
gpt4 key购买 nike

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

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

所以一切都没有问题,我能够在本地调用所有 Controller 方法。然后我决定作为实验将它部署在 GAE 上。我根据这里的说明调整了 pom.xml https://github.com/GoogleCloudPlatform/getting-started-java/tree/master/appengine-standard-java8/springboot-appengine-standard

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

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

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

关于我应该调用我的 Controller 方法的 URL,你能给我建议吗?我是不是忘了实现 web.xml servlet 映射之类的东西?或者是一些特定的 Spring Boot - Google App Engine 问题?

如有任何提示,我将不胜感激。

先谢谢大家

最佳答案

正在关注 this steps翻译成以下 the code :

  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 启动程序:

在 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包含这些内容:

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

    <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)并导航到 Libraries -> Maven dependencies 并单独选择每个库(在我的例子中为 jul-to-slf4j-1.7.25spring-boot-starter-tomcat-1.5.3.RELEASE)。右键单击每个库并转到 Maven -> Exclude Maven artifact... 然后单击Ok。这将对 POM 产生与编辑相同的效果。

关于java - Google App Engine Standard env - 找不到 Controller 方法 - Spring Boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48170662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com