代码之家  ›  专栏  ›  技术社区  ›  Bostone

Jetty-设置系统属性[重复]

  •  17
  • Bostone  · 技术社区  · 14 年前

    我在码头上运行webapp。该应用程序的配置来自运行Jetty的同一服务器上的文件。在应用程序内部,我依赖系统属性来获取文件的路径,以便对其进行分析。例如。

    final String loc = System.getProperty(FACTORY);
    

    现在我可以用D开关启动码头 $FACTORY 但如果可以的话,我宁愿把它放在jetty.xml中。我知道有 <SystemProperty /> 标记,但它似乎只提供已经存在的系统值 <Set/> 标签。有人能给我举个例子说明如何做到这一点吗?(如果可以实现)

    4 回复  |  直到 10 年前
        1
  •  2
  •   Community Paul Sweatte    7 年前
        2
  •  22
  •   thoredge    13 年前

    <Call class="java.lang.System" name="setProperties">
      <Arg>
        <New class="java.util.Properties">
          <Call name="putAll">
            <Arg><Call class="java.lang.System" name="getProperties"/></Arg>
          </Call>
          <Call name="setProperty">
            <Arg>run.mode</Arg>
            <Arg>staging</Arg>
          </Call>
        </New>
      </Arg>
    </Call>
    

        3
  •  7
  •   Steve Jones    10 年前

        private void startJetty() {
        try {
            long startTime = System.currentTimeMillis();
    
            server = new Server();
            setUpSystemProperties(server);
    
            Connector connector = new SelectChannelConnector();
            connector.setPort(port);
            server.addConnector(connector);
    
            WebAppContext webAppContext = new WebAppContext();
            webAppContext.setWar("src/main/webapp");
            server.setHandler(webAppContext);
    
            server.start();
        }
        catch (Exception e) {
            throw new RuntimeException("Failed to set-up web server fixture", e);
        }
    }
    
    private void setUpSystemProperties(Server jettyServer) {
        final Properties systemProperties = new Properties();
        // set your system properties...
        systemProperties.setProperty("yourProperty", "yourValue");
        jettyServer.addLifeCycleListener(new SystemPropertiesLifeCycleListener(systemProperties));
    }
    
    private class SystemPropertiesLifeCycleListener extends AbstractLifeCycleListener {
        private Properties toSet;
    
        public SystemPropertiesLifeCycleListener(Properties toSet) {
            this.toSet = toSet;
        }
    
        @Override
        public void lifeCycleStarting(LifeCycle anyLifeCycle) {
            // add to (don't replace) System.getProperties()
            System.getProperties().putAll(toSet);
        }
    }
    

        4
  •  3
  •   Bostone    14 年前

    1. jetty-web.xml jetty.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"    
         "http://jetty.mortbay.org/configure.dtd">
    <Configure class="org.mortbay.jetty.webapp.WebAppContext">
        <New class="org.mortbay.jetty.plus.naming.EnvEntry">
            <Arg>myOwnParam</Arg>
            <Arg type="java.lang.String">//some/path/to/the/file</Arg>
        </New>
    </Configure>
    

        InitialContext c = new InitialContext();
        EnvEntry env = (EnvEntry)
             c.lookup("org.mortbay.jetty.plus.naming.EnvEntry/myOwnParam");
        final String myString = (String) env.getObjectToBind();
    

    myString