Jetty9不从Java属性文件

时间:2017-06-07 14:57:14

标签: properties-file jetty-9

Jetty文档说:

  

属性文件

     

标准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>

所以基本的问题是,如何实现我放在*.properties目录下(在启用资源模块之后)的Java ${jetty.base}/resources文件可以作为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和任何其他配置文件之外的数据库连接设置。

这里我最好的选择是什么?

1 个答案:

答案 0 :(得分:2)

  

注意:请勿编辑/更改/删除/重命名/修改${jetty.home}目录中的任何内容。   (${jetty.home}是您解压缩的位置   jetty-home-<ver>.tar.gzjetty-distribution-<ver>.tar.gz

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

又名

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

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

使用<SystemProperty name="key"/>足以在XML中访问它们。