【发布时间】:2014-05-23 17:48:50
【问题描述】:
在我们现有的应用程序属性文件嵌入到一个 jar 文件中,我们决定将属性文件移到耳朵(应用程序)之外,将属性文件放在 IBM websphere 8.5 中的最佳位置是什么?这样我就可以使用 WAS 环境变量检索路径,并且文件应该对集群中的所有节点都可用..
【问题讨论】:
标签: java jakarta-ee properties websphere websphere-8
在我们现有的应用程序属性文件嵌入到一个 jar 文件中,我们决定将属性文件移到耳朵(应用程序)之外,将属性文件放在 IBM websphere 8.5 中的最佳位置是什么?这样我就可以使用 WAS 环境变量检索路径,并且文件应该对集群中的所有节点都可用..
【问题讨论】:
标签: java jakarta-ee properties websphere websphere-8
在讨论中只有我的 2 美分。
为了快速简便的解决方案,我不会将属性文件放在 WAS_HOME/classes 中,而是放在 PROFILE_ROOT/properties 中 - 此文件夹位于类路径中,无论如何它都用于存储属性。 /classes 的一个好处是它的范围是配置文件,因此如果您有不同的配置文件,例如用于测试或集成,它们可能有不同的设置。
对于“纯”WebSphere 解决方案,这将允许通过控制台管理属性,您可以查看资源环境提供程序(但它的解决方案相当长、复杂): http://www.ibm.com/developerworks/websphere/library/techarticles/0611_totapally/0611_totapally.html
【讨论】:
getResourceAsStream() 方法来获取输入流吗?您是如何尝试加载属性的?
getResourceAsStream()。
与(当前)接受的答案相反,我认为将任何内容放在WAS_HOME/classes 下是一种不鼓励的做法。 IBM 经常使用此目录来放置被认为是 WAS 和相关产品“内部”的类/JAR 文件(例如,某些版本的 WebSphere Portal 将 JAR 文件放置在该目录中)。
此外,将项目放在WAS_HOME/classes 中可以使项目可用于在此 WAS 安装创建的所有 WAS 配置文件上运行的所有应用程序。你无法改变这种行为;这就是 WAS 的设计方式。这是得出结论WAS_HOME/classes 应保留供 WAS 内部使用的另一个原因。
这个论点可以推广到WAS_HOME 下的几乎任何位置:用户文件(即不是由软件供应商提供的文件)不应驻留在产品安装程序管理的位置/卸载程序。 WAS_HOME 层次结构由 IBM Installation Manager(或 WAS 安装程序,取决于所讨论的 WAS 版本)管理。我不会把我的任何文件放在那里。
现在,回到你的问题。如果您必须让您的属性文件“松散”(即不包含在任何特定的 EAR 中),您最好的选择是执行以下操作:
将共享库附加到服务器或您希望属性文件可用于的应用程序:
【讨论】:
我使用的另一个解决方案是将 URL 资源引用添加到您的应用程序 web.xml。例如“网址/属性”。
然后使用管理控制台在 Websphere 中定义 URL,以指向“file:///dev.properties”或“file:///test.properties”等。
然后在部署时,将 URL 引用映射到适当的 websphere URL 定义。
现在,您的代码可以对 URL 进行 jndi 查找。
这样做的好处是您可以部署单个代码库,并在部署时进行自定义以指向不同的 URL。
【讨论】:
您可以为此使用类加载器目录。我将使用 $WEBSPHERE_HOME/AppServer/classes 下的目录类(您可能需要创建)并将您的属性放在那里。您应该能够从您的任何应用程序/服务器中找到它们。
【讨论】:
WAS_HOME/classes 中。
试试这个
【讨论】:
如果属性值不是特定于集群的一个节点或属性值是密码,则数据库是放置属性的最佳位置。对于像密码这样的属性,我建议您将属性值设置为 WAS 中的 jndi 属性。使用公共配置从两个源中读取。在您的代码库中有一个 .property 文件,它将覆盖 db 和 jndi 中的值。这样,您的开发人员可以在开发中覆盖 db/jndi 值。
【讨论】: