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和任何其他配置文件之外的数据库连接设置。
这里我最好的选择是什么?
答案 0 :(得分:2)
注意:请勿编辑/更改/删除/重命名/修改
${jetty.home}
目录中的任何内容。 (${jetty.home}
是您解压缩的位置jetty-home-<ver>.tar.gz
或jetty-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中访问它们。