当前位置: 首页 > 知识库问答 >
问题:

带有JavaSprint Boot REST的Google App Engine Standard-无法在GCLOUD服务器中工作

江宏伟
2023-03-14

我使用这里提供的指南,在本地*部署并测试了Java Spring boot RESTful应用程序的本地版本。使用命令mvn appengine:run,我成功地访问了REST API,没有任何问题(通过例如:http://localhost:8080/setiaalam/amenities).测试了浏览器和邮递员。

然后,一旦我将其部署到GCLOUD中,它总是返回404。我想可能它需要一些时间来更新服务器,所以即使在几分钟或几个小时后,它仍然是404。除了文件未找到404之外,日志没有提供任何有用的东西。我用来部署的命令是:mvn appEngine:部署。

如果它与设置有关,例如pom.xml或appengine-web.xml,我不认为它是,因为运行localhost使用命令mvn appEngine: run根本没有问题。

有人知道可能的原因是什么吗?再次,我想强调一下,这是访问RESTful API而不是servlet的问题。

更新第2部分

添加了应用程序。属性

# Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
# This is for connecting between Google App Engine Standard in the Cloud with Google Cloud SQL
#spring.datasource.url = jdbc:mysql://google/setiaalam?cloudSqlInstance=sa-community-1545365567756:asia-southeast1:setiaalam&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=root&password=setiaalam99?useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10
spring.cloud.gcp.sql.instance-connection-name=sa-community-1545365567756:asia-southeast1:setiaalam
spring.cloud.gcp.sql.database-name=setiaalam


#spring.datasource.url = jdbc:mysql://35.240.140.154:3306/setiaalam?useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10
spring.datasource.username = root
spring.datasource.password = mypwd

spring.datasource.driver-class-name = com.mysql.jdbc.Driver

# Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update

# sa-community-1545365567756:asia-southeast1:setiaalam

以及以下错误:

Driver com.mysql.jdbc.Driver claims to not accept jdbcUrl, jdbc:google:mysql://sa-community-1545365567756:asia-southeast1:setiaalam/setiaalam

更新第1部分

新增appengine-web.xml(位于src/main/webapp/WEB-INF/)

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <threadsafe>true</threadsafe>
  <runtime>java8</runtime>
<system-properties>
  <property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties"/>
</system-properties>
</appengine-web-app>

网络。xml(位于src/main/webapp/WEB-INF/)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>Servlet 3.0 Web Application</display-name>
</web-app>

pom。xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.1.2.RELEASE</version>
	<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.venturearkstudio</groupId>
<artifactId>setia-alam-community</artifactId>
<version>0.0.2</version>
<packaging>war</packaging>
<name>setia-alam-community</name>
<description>description for this said project</description>

<properties>
	<java.version>1.8</java.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
				<!-- NEEDED FOR GOOGLE APP ENGINE TOMCAT EXCLUSION-->
	 	<exclusions>
	    	<exclusion>
	      		<groupId>org.springframework.boot</groupId>
	      		<artifactId>spring-boot-starter-tomcat</artifactId>
	    	</exclusion>
	  	</exclusions>
	</dependency>

	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<scope>compile</scope>
	</dependency>
	
	<!-- NEEDED FOR GOOGLE CLOUD SQL -->
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
		<version>1.0.0.RELEASE</version>
	</dependency>
	 
	 <!-- NEEDED FOR GOOGLE APP ENGINE JAVAX.SERVLET-->
	   <dependency>
	       <groupId>javax.servlet</groupId>
	       <artifactId>javax.servlet-api</artifactId>
	       <version>3.1.0</version>
	       <scope>provided</scope>
	   </dependency>
	<!-- NEEDED FOR GOOGLE APP ENGINE SCOPE TEST-->
	   <dependency>
	       <groupId>org.springframework.boot</groupId>
	       <artifactId>spring-boot-starter-test</artifactId>
	       <scope>test</scope>
  			</dependency>
	
	<!-- NEEDED FOR GOOGLE APP ENGINE JETTY LOGGING -->
	<dependency>
  			<groupId>org.slf4j</groupId>
  			<artifactId>jul-to-slf4j</artifactId>
  			<scope>provided</scope>
	</dependency>
	
	<!-- NEEDED FOR HIBERNATE -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>${hibernate.version}</version>
	</dependency>
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-entitymanager</artifactId>
		<version>${hibernate.version}</version>
	</dependency>
	
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	<!-- The following is needed to be excluded due to Google Cloud needs. -->
		<exclusions>
        	<exclusion>
            	<groupId>org.slf4j</groupId>
            	<artifactId>jul-to-slf4j</artifactId>
        	</exclusion>
    	</exclusions>
	</dependency>
	
	
	<!-- NEEDED FOR GOOGLE SERVICES -->
	<dependency>
  			<groupId>com.google.maps</groupId>
  			<artifactId>google-maps-services</artifactId>
  			<version>0.9.1</version>
	</dependency>
	<dependency>
    	<groupId>com.google.code.gson</groupId>
    	<artifactId>gson</artifactId>
    	<version>2.8.5</version>
    	<scope>provided</scope>
	</dependency>
	
</dependencies>

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
		
		    <!-- NEEDED FOR GOOGLE APP ENGINE MAVEN PLUGIN -->
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>appengine-maven-plugin</artifactId>
            <version>1.3.1</version>
            <configuration>
   			<cloudSdkPath>C:/Program Files (x86)/Google/Cloud SDK/google-cloud-sdk</cloudSdkPath>
 		 	</configuration> 
        </plugin>
		
		<plugin>
	        <groupId>org.apache.maven.plugins</groupId>
	        <artifactId>maven-war-plugin</artifactId>
			<version>2.6</version>
			<configuration>
            	<failOnMissingWebXml>false</failOnMissingWebXml>
        	</configuration>
  		</plugin>
		
	</plugins>
</build>

</project>

从已部署的文件生成的app.yaml(Stackdrive Debug):

runtime: java8
inbound_services:
- warmup
derived_file_type:
- java_precompiled
threadsafe: True
auto_id_policy: default
api_version: 'none'
handlers:
- url: (/.*)
  static_files: __static__\1
  upload: __NOT_USED__
  require_matching_file: True
  login: optional
  secure: optional
- url: /
  script: unused
  login: optional
  secure: optional
- url: /.*/
  script: unused
  login: optional
  secure: optional
- url: /_ah/.*
  script: unused
  login: optional
  secure: optional

共有1个答案

拓拔松
2023-03-14

更改您的web.xml以指定Servlet 3.1:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">
  <display-name>Servlet 3.1 Web Application</display-name>
</web-app>

我报了个错误。

 类似资料:
  • 我已经在我的Gatein3.6(使用Jboss AS7)中创建了一个示例jersey服务器。下面是创建jersey服务器的步骤。 我已经在web.xml文件中添加了以下几行代码。 类文件是 但不幸的是,我在启动服务器时遇到了一个异常 17:17:22,649错误[org.apache.catalina.core.containerbase.[jboss.web].[default-host].[/

  • 我是Jasper报告新手,我有一个报告,它只有一个简单脚本,只返回一个字符串。在使用Jasper studio 6.5.0预览时,我能够看到结果,但当我尝试在本地Jasper服务器上部署相同的报表时,它会抛出错误: 我正在Glassfish 4.1.1上运行服务器,在lib文件夹中包含了scriplet jar文件,并根据https://community.jaspersoft.com/wiki/

  • 无法启动nginx服务器OS:ubuntu服务器16.04 systemctl status nginx.status抛出此消息:nginx.service-高性能web服务器和反向代理服务器加载:加载(/lib/systemd/system/nginx.service;enabled;vendor preset:enabled)活动:失败(结果:exit-code)自UTC Thu 2016-1

  • 这是我的链接 url正在重写,但页面未运行。。。这是一个错误 未找到 请求的URL/domin。在此服务器上找不到com/new。 此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。 域中的Apache服务器。com端口80

  • 问题内容: 我有一个要配置的现有http服务器。我已经将导入文件包括在内,并且已经在运行http服务器: 当我尝试访问http:// localhost:8080 / debug / pprof /时, 我得到了。 这就是在本地计算机上使用时得到的: 与远程客户端相同: 问题答案: 文档中未明确提及它,而仅将其处理程序注册到。 从来源: 如果您未使用默认的多路复用器,则只需向您要使用的任何多路复用

  • 我使用kerberos身份验证配置了HDFS,我可以使用自己的keytab文件访问HDFS集群中任何机器上的HDFS。但是当我使用相同的keytab访问HDFS集群外的远程服务器上的HDFS时,我无法访问。我收到以下错误消息,顺便说一下,我已经将服务器的配置文件krb5.conf复制到hadoop集群外的远程机器。