基于 Java 的 Spring WebApp 未运行 Jetty9

标签 java jetty jetty-9

我有一个基于Java的Spring配置(没有web.xml)的war项目,它在mvn jetty:run上完美运行,但是当我将Jetty 9放入机器中时,该项目没有运行。 jetty 9 服务器运行,但应用程序根本没有初始化。

该应用程序包含一个队列订阅者。

看来我需要一个 web.xml 文件。

有人知道我缺少什么吗?

Jetty 9 服务器上应用程序的 xml 配置文件是(编辑:使用正确的 conf 文件)

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<!--
        JETTY_HOME="<%=node['api']['worker']['jetty']['jetty_home']%>"
        JAVA_HOME="<%=node['api']['worker']['jetty']['java_home']%>"
        JETTY_CONSOLE="<%=node['api']['worker']['jetty']['jetty_console']%>"
        JETTY_USER="<%=node['api']['worker']['jetty']['jetty_user']%>"
        JETTY_ARGS="<%=node['api']['worker']['jetty']['jetty_args']%>"
        JETTY_RUN="<%=node['api']['worker']['jetty']['jetty_run']%>"
        JAVA_OPTIONS="<%=node['api']['worker']['jetty']['java_options']%>"
-->
<Configure id="Server" class="org.eclipse.jetty.server.Server">
  <Get name="ThreadPool">
    <Set name="minThreads" type="int"><Property name="threads.min" default="10"/></Set>
    <Set name="maxThreads" type="int"><Property name="threads.max" default="200"/></Set>
    <Set name="idleTimeout" type="int"><Property name="threads.timeout" default="60000"/></Set>
    <Set name="detailedDump">false</Set>
  </Get>

  <Call name="addBean">
    <Arg>
      <New class="org.eclipse.jetty.util.thread.ScheduledExecutorScheduler"/>
    </Arg>
  </Call>

  <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
    <Set name="secureScheme">https</Set>
    <Set name="securePort"><Property name="jetty.secure.port" default="8443" /></Set>
    <Set name="outputBufferSize"><Property name="jetty.output.buffer.size" default="32768" /></Set>
    <Set name="requestHeaderSize"><Property name="jetty.request.header.size" default="8192" /></Set>
    <Set name="responseHeaderSize"><Property name="jetty.response.header.size" default="8192" /></Set>
    <Set name="sendServerVersion"><Property name="jetty.send.server.version" default="true" /></Set>
    <Set name="sendDateHeader"><Property name="jetty.send.date.header" default="false" /></Set>
    <Set name="headerCacheSize">512</Set>
  </New>

  <New class="org.eclipse.jetty.server.ServerConnector">
    <Arg name="server"><Ref refid="Server" /></Arg>
    <Arg name="factories">
      <Array type="org.eclipse.jetty.server.ConnectionFactory">
        <Item>
          <New class="org.eclipse.jetty.server.HttpConnectionFactory">
            <Arg name="config"><Ref refid="httpConfig" /></Arg>
          </New>
        </Item>
      </Array>
    </Arg>
    <Set name="host"><Property name="jetty.host" /></Set>
    <Set name="port"><Property name="jetty.port" default="8080"/></Set>
    <Set name="idleTimeout"><Property name="http.timeout" default="30000"/></Set>
    <Set name="soLingerTime"><Property name="http.soLingerTime" default="-1"/></Set>
    <Set name="acceptQueueSize"><Property name="http.acceptQueueSize" default="0"/></Set>
  </New>

  <Call class="java.lang.System" name="setProperty">
    <Arg>logback.configurationFile</Arg>
    <Arg>file:///conf/worker/logback.xml</Arg>
  </Call>
  <Call class="java.lang.System" name="setProperty" >
    <Arg>service.config.path</Arg>
    <Arg>/opt/webapps/worker</Arg>
  </Call>


  <Set name="handler">
    <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
      <Set name="handlers">
        <Array type="org.eclipse.jetty.server.Handler">
          <Item>
            <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
          </Item>
          <Item>
            <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler">
              <Set name="showContexts">false</Set>
            </New>
          </Item>
        </Array>
      </Set>
    </New>
  </Set>

  <New class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war"><Property name="jetty.webapps" default="." />/opt/webapps/worker.war</Set>
    <Set name="extractWAR">true</Set>
  </New>

  <Call name="addBean">
    <Arg>
      <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
        <Set name="contexts">
          <Ref refid="Contexts" />
        </Set>
        <Call id="webappprovider" name="addAppProvider">
          <Arg>
            <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
              <Set name="monitoredDirName"><Property name="jetty.home" default="." />/webapps</Set>
              <Set name="scanInterval">1</Set>
              <Set name="extractWars">true</Set>
              <Set name="configurationClasses">
                <Array type="java.lang.String">
                  <Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item>
                  <Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item>
                  <Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item>
                  <Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item>
                  <Item>org.eclipse.jetty.annotations.AnnotationConfiguration</Item>
                  <Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item>
                </Array>
              </Set>
            </New>
          </Arg>
        </Call>
      </New>
    </Arg>
  </Call>

  <Set name="stopAtShutdown">true</Set>
  <Set name="stopTimeout">5000</Set>
  <Set name="dumpAfterStart"><Property name="jetty.dump.start" default="false"/></Set>
  <Set name="dumpBeforeStop"><Property name="jetty.dump.stop" default="false"/></Set>
</Configure>

jetty 控制台日志是

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
WARNING: System properties and/or JVM args set.  Consider using --dry-run or --exec
2014-12-19 19:32:49.749:INFO:oejs.Server:main: jetty-9.0.3.v20130506
2014-12-19 19:32:49.800:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/opt/jetty- distribution-9.0.3.v20130506/webapps/] at interval 1
2014-12-19 19:32:51.554:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@45afc369{/,file:/tmp/jetty-0.0.0.0-8080-worker.war-_-any-/webapp/,AVAILABLE}{/worker/worker.war}
2014-12-19 19:32:51.560:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/opt/jetty-distribution-9.0.3.v20130506/webapps/] at interval 1
2014-12-19 19:32:51.587:INFO:oejs.ServerConnector:main: Started ServerConnector@34cd072c{HTTP/1.1}{0.0.0.0:8080}

编辑:xml 配置文件现在是正确的,我必须取消注释 ${jetty.home}/start.ini

中的上述选项
# ===========================================================
# Enable additional webapp environment configurators 
# -----------------------------------------------------------
OPTIONS=plus
etc/jetty-plus.xml

# ===========================================================
# Enable servlet 3.1 annotations
# -----------------------------------------------------------
OPTIONS=annotations
etc/jetty-annotations.xml 

最佳答案

首先要解决一些明显的问题。

  1. 您使用的是 Java 8,请升级到 Jetty 9.2.6(Jetty 9.0.3 太旧,不能很好地支持 Java 8)
  2. 您的 DTD 引用有问题,它来自 Jetty 7,已知它会在 Jetty 9 中导致问题。 使用<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">相反。
  3. 您的类引用错误,应该修复。 "org.eclipse.jetty_runˆy.server.Server"不存在

关于基于 Java 的 Spring WebApp 未运行 Jetty9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27574308/

相关文章:

java - 将带有单引号的字符串从 Java 插入到 Postgresql 中

java - FXML如何设置选择框默认值

java - mockito 和 jetty-client : receiving NullPointerException when start() and stop() methods are invoked

clojure - 为从 nginx 反向代理转发的请求添加唯一 id

java - 一个进程中的两个 Jetty 嵌入式服务器实例

java - 在jetty中部署静态内容

Java - 从 (a,b) 延伸到 (c,d) 的直线是否与点 (x,y) 相交?

java - 创建另一个窗口只显示文本 + Swing

java - Tomcat 中存在的过滤器在 Jetty 中不存在,如何让 Jetty 忽略它?

java - 为什么我的简单 Jetty 服务器一次仅处理 1 个请求?