我试图在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问题?
我会感激任何提示。
提前谢谢大家
答案 0 :(得分:2)
关注this steps后,the code转换为以下内容:
在pom.xml中,将<packaging>jar</packaging>
更改为<packaging>war</packaging>
在包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);
}
}
在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>
排除Jetty依赖项并包含Servlet API依赖项:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
添加App Engine标准插件:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
</plugin>
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>
<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>
在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>
修改强>
对于步骤3
和7
,您还可以转到项目资源管理器(如果您正在使用Eclipse)并导航到库 - &gt; Maven依赖并单独选择每个库(在我的案例中为jul-to-slf4j-1.7.25
和spring-boot-starter-tomcat-1.5.3.RELEASE
)。右键单击每个库并转到 Maven - &gt;排除Maven工件 ...然后点击确定。这将对POM产生与编辑相同的效果。