我试图在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问题?
我将不胜感激。
谢谢大家
执行此步骤后,代码将转换为以下内容:
在pom.xml中,更改<packaging>jar</packaging> 为 <packaging>war</packaging>
<packaging>jar</packaging>
<packaging>war</packaging>
在包中guru.springframework添加此类:
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>
<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>
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>
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>
在src/main/resources添加带有以下内容的logging.properties文件中:
src/main/resources
.level = INFO
并在其中src/main/webapp/WEB-INF/appengine-web.xml粘贴:
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),然后导航到 图书馆- > Maven依赖与单独选择每个库(jul-to- slf4j-1.7.25和spring-boot-starter-tomcat-1.5.3.RELEASE在我的情况)。右键单击每个库,然后转到 Maven- >排除Maven工件 …,然后单击“ 确定” 。这对POM的影响与编辑相同。
3
7
jul-to- slf4j-1.7.25
spring-boot-starter-tomcat-1.5.3.RELEASE