【问题标题】:Jetty9 does not load properties from Java properties fileJetty9 不从 Java 属性文件加载属性
【发布时间】:2017-06-07 14:57:14
【问题描述】:

码头文档说:

属性文件

标准 Java 属性文件也用于 Jetty 多种方式配置:

  • 通过使用 Property 元素参数化 Jetty IoC XML。
  • 配置默认日志记录机制 (StdErrLog)。其他日志记录 可以使用框架,也可以使用属性文件(例如, log4j)。
  • 作为登录用户名和凭据的简单数据库。

我正在尝试实现第一点:参数化我的 jetty-env.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">

<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
  <New id="oracleDS" class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg>
      <Ref refid='wac'/>
    </Arg>
    <Arg>jdbc/oracleDB</Arg>
    <Arg>
      <Call class="oracle.ucp.jdbc.PoolDataSourceFactory" name="getPoolDataSource">
        <Set name="URL"><SystemProperty name="database.url" /></Set>
        <Set name="user"><SystemProperty name="database.user" /></Set>
        <Set name="password"><SystemProperty name="database.password" /></Set>

        <Set name="connectionFactoryClassName">oracle.jdbc.pool.OracleDataSource</Set>
      </Call>
    </Arg>
  </New>
</Configure>

所以基本问题是,我怎样才能使我放置在${jetty.base}/resources 目录下的Java *.properties 文件(启用资源模块后)可以作为Property 或SystemProperty 访问?

最初我认为将它放在资源文件夹中就足够了,因为模块的文档说

模块:资源

添加 $JETTY_HOME/resources 和/或 $JETTY_BASE/resources 目录到服务器类路径。对配置有用 属性文件(例如 jetty-logging.properties)

然后我尝试在start.ini 中引用该文件,但也没有成功。

作为最后一次尝试,我在 Jetty 启动期间将文件名作为参数处理:java -jar start.jar resources\my.properties

在所有情况下均未显示错误,但调用 java -jar start.jar --list-config 未按预期显示条目,我也无法直接从我的 Java 代码访问该属性:System.getProperty("propertyKey")

如果我直接将属性作为 jvm 选项 (java -jar start.jar -DpropertyKey=propertyValue) 传递,这对于生产来说是没有选项的,它工作得很好。

更新 16.6.: 集成 start.ini 中的属性并不是一个真正的选择,因为应用程序需要自动部署在具有不同连接设置的不同环境中。使用单独的配置文件更容易做到这一点,它只包括 *.war 和任何其他配置文件之外的数据库连接设置。

我最好的选择是什么?

【问题讨论】:

    标签: properties-file jetty-9


    【解决方案1】:

    注意:不要编辑/更改/删除/重命名/修改${jetty.home} 目录中的任何内容。 (${jetty.home}是你解包的位置 jetty-home-&lt;ver&gt;.tar.gzjetty-distribution-&lt;ver&gt;.tar.gz)

    在您的${jetty.base}/start.ini 中列出它们。

    又名

    -Ddatabase.url=db://foo/table
    -Ddatabase.user=admin
    -Ddatabase.password=secret
    

    这会将它们放在 System.getProperties() 列表中。

    使用&lt;SystemProperty name="key"/&gt; 足以在 XML 中访问它们。

    【讨论】:

    • 我考虑过这个选项,但是将这些信息与其他内容集成到一个文件中使得在不同环境中使用自动部署变得更加困难。这就是为什么我更愿意将属性写在一个单独的文件中。
    • 那就叫它${jetty.base}/start.d/mydb.ini,同样的事情。
    • 或使用分层配置${jetty.home} -> /myenv/start.ini -> ${jetty.base} 在特定环境下完成此操作。
    猜你喜欢
    • 2010-09-24
    • 2015-12-15
    • 2014-11-17
    • 1970-01-01
    • 2011-06-14
    • 2014-12-09
    • 2012-01-02
    • 1970-01-01
    相关资源
    最近更新 更多