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

appengine标准上的Spring Boot

夏立果
2023-03-14

我试图在本地appengine模拟器上运行我的代码,但我仍然得到错误信息,即ServletInitializer类不是javax.servlet.servlet有启动时的日志

Connected to server
2017-09-27 15:32:49.323:INFO:oejs.Server:main: jetty-9.3.18.v20170406
2017-09-27 15:32:53.756:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=3587ms
wrz 27, 2017 1:32:53 PM com.google.appengine.tools.development.ApiProxyLocalImpl log
INFO: javax.servlet.ServletContext log: 2 Spring WebApplicationInitializers detected on classpath

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.7.RELEASE)
 ...
 ... 
 ...
 ...
 2017-09-27 13:33:03.777 [main]       [32mINFO[m -o.s.b.StartupInfoLogger- Started ServletInitializer in 9.329 seconds (JVM running for 15.913)
2017-09-27 13:33:04.045 [main]       [34mDEBUG[m -o.s.w.f.GenericFilterBean- Initializing filter 'provideJwtAuthTokenFilter'
2017-09-27 13:33:04.045 [main]       [34mDEBUG[m -o.s.w.f.GenericFilterBean- Filter 'provideJwtAuthTokenFilter' configured successfully
2017-09-27 13:33:04.047 [main]       [31mERROR[m -c.g.a.t.d.ApiProxyLocalImpl- javax.servlet.ServletContext log: unavailable
javax.servlet.UnavailableException: Servlet class com.blenge.blenge.ServletInitializer is not a javax.servlet.Servlet
    at org.eclipse.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:522)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:381)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:891)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:349)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1406)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1368)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778)
    at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:522)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:105)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131)
    at org.eclipse.jetty.server.Server.start(Server.java:422)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:105)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
    at org.eclipse.jetty.server.Server.doStart(Server.java:389)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at com.google.appengine.tools.development.jetty9.JettyContainerService.startContainer(JettyContainerService.java:346)
    at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:284)
    at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.java:26)
    at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.java:87)
    at com.google.appengine.tools.development.Modules.startup(Modules.java:105)
    at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:274)
    at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.java:47)
    at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:219)
    at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:217)
    at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:368)
    at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:47)
    at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:223)
    at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:214)

我已经创建了ServletInitializer类,类似于教程和示例项目https://github.com/googleCloudplatform/get-started-java/blob/master/appengine-standard-java8/springboot-appengine-standard/src/main/java/com/example/appengine/demos/springboot/ServletInitializer.java

我的build.gradle文件https://gist.github.com/mistic92/576d333df9da7d7efb3e833fd502e430

gcloud sdk版本

C:\Users\Lukasz>gcloud version
Google Cloud SDK 172.0.1
alpha 2017.09.15
app-engine-java 1.9.56
app-engine-python 1.9.60
beta 2017.09.15
bq 2.0.26
cloud-datastore-emulator 1.2.1
core 2017.09.21
datalab 20170818
gcloud
gsutil 4.27
kubectl
pubsub-emulator 2017.09.15

edit1:web.xml文件。另外,我还得到警告说ServletInitializer不能分配给javax.servlet.servlet。我该怎么办?

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">

    <servlet>
        <servlet-name>blenge-backend</servlet-name>
        <servlet-class>com.blenge.blenge.ServletInitializer</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>blenge-backend</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

共有1个答案

景辰钊
2023-03-14

如果您有一个web.xml,它应该指向servlet3.1规范,而不是2.5....缺省的web.xml为3.1

 类似资料:
  • 使用Spring Boot 2.0.0。在Google Appengine标准上发布。使用自动伸缩,但试图控制实例的创建/销毁。需要能够做一些清理,并希望记录这些事件。 Spring Boot中的任何方法,如@PreDestroy或ContextClosedEvent,似乎都不适用于GAE。 根据文档,应该可以通过添加关机钩子来检测实例的关机。 文档LifecycleManager.Shutdow

  • 正在尝试使用CLI将ssh插入AppEngine实例。我有正确的命令,但不确定如何为标准实例允许ssh,或者这根本不可能。我是Gcloud(AWS Guy)的新手。他们的文档在实例类型和允许或不允许的方面不是很好。有人对此有什么建议吗。提前道谢!

  • 在Appengine上使用HikariCP作为连接池部署Spring Boot应用程序时,在执行一些请求时,我会遇到一些与数据库(线程)相关的错误: 然后我发现AppEngine只允许应用程序使用它的ThreadFactory创建线程。因此,我确保将Hikari配置为使用AppEngine的线程工厂,如下所示:

  • 我试图在新的AppEngine标准Python 3.7运行时使用Spacy。 当我尝试部署时,我得到: 错误:(gcloud.app.deploy)无法上载文件[/my/project/path/venv/lib/python3.7/site packages/spacy/lang/tr/lemmatizer.py],该文件的大小为[41523943](大于允许的最大大小[33554432])。请

  • 正如通常发生的那样,客户更改了他们的G Suite电子邮件密码,我们使用该密码发送电子邮件(在Java@AppEngine上)。令牌如预期的那样被撤销了,并且我们设法使所有的东西都能在DEV和UAT环境中正常工作,然而PROD由于某种原因仍然得到了臭名昭著的“无效授权”。我想知道数据存储中是否有一些缓存保存原始凭据?Stackdriver不允许对方法调用求值,因此无法看到里面的内容。我们怀疑这与缓

  • 我已经开始学习JSP,并尝试编写我的第一个JSP页面,并使用操作标记。bean是一个空类,没有属性,只有一个方法: 我将FirstBean.java文件编译到位于WEB-INF/classes目录的foo目录中。然后我得到了包含以下内容的fistbean.jsp文件: 如果有人能帮助我解决这个问题,我们将不胜感激。