Java 在IBM websphere 8.5中放置属性文件的最佳位置?

Java 在IBM websphere 8.5中放置属性文件的最佳位置?,java,jakarta-ee,properties,websphere,websphere-8,Java,Jakarta Ee,Properties,Websphere,Websphere 8,在我们现有的应用程序属性文件嵌入到jar文件中时,我们决定将属性文件移到ear(应用程序)之外,在IBMWebSphere8.5中放置属性文件的最佳位置是什么?这样我就可以使用WAS环境变量检索路径,并且集群中的所有节点都应该可以使用该文件 您可以使用类加载器目录来实现这一点。我将使用$WEBSPHERE_HOME/AppServer/classes下的目录类(您可能需要创建),并将您的属性放在那里。您应该能够从任何应用程序/服务器中找到它们 检查试试这个 创建一个目录(您选择的位置)来保存属性

在我们现有的应用程序属性文件嵌入到jar文件中时,我们决定将属性文件移到ear(应用程序)之外,在IBMWebSphere8.5中放置属性文件的最佳位置是什么?这样我就可以使用WAS环境变量检索路径,并且集群中的所有节点都应该可以使用该文件

您可以使用类加载器目录来实现这一点。我将使用$WEBSPHERE_HOME/AppServer/classes下的目录类(您可能需要创建),并将您的属性放在那里。您应该能够从任何应用程序/服务器中找到它们

检查

试试这个

  • 创建一个目录(您选择的位置)来保存属性文件
  • 将目录添加到WebSphere类路径
  • 从类路径加载属性文件

  • 如果属性值不是集群中某个节点的特定值,或者属性值是密码,则数据库是放置属性的最佳位置。对于密码之类的属性,我建议您在WAS中将属性值设置为jndi属性。使用commons配置从两个源读取。在代码库中有一个.property文件,它将覆盖db和jndi中的值。这样,您的开发人员就可以在开发中覆盖db/jndi值。

    与(当前)公认的答案相反,我认为将任何内容放在
    WAS\u HOME/classes
    下是不可取的做法。IBM经常使用该目录来放置被认为是WAS和相关产品“内部”的类/JAR文件(例如,WebSpherePortal的某些版本将JAR文件放置在该目录中)

    此外,将项目放置在
    WAS_HOME/classes
    中,可使项目可用于运行在此WAS安装中创建的所有WAS配置文件的所有应用程序。你不能改变这种行为;这就是设计的方式。这是得出结论的另一个原因,即
    是家庭/班级
    应该保留供内部使用

    此参数可以推广到
    WAS_HOME
    下的任何位置:用户文件(即软件供应商未提供的文件)不应位于由产品的安装程序/卸载程序管理的位置。
    WAS\u HOME
    层次结构由IBM Installation Manager(或WAS安装程序,取决于所讨论的WAS版本)管理。我不会把我的任何文件放在那里

    现在,回到你的问题上来。如果必须使属性文件“松散”(即,不包含在任何特定EAR中),则最好执行以下操作:

  • 在WAS目录树外创建一个目录,并将文件放在那里
  • 在WAS中,创建共享库定义
  • 将您创建的目录添加到共享库中
  • 将共享库附加到您希望属性文件可用于的服务器或应用程序:

    • 要将共享库附加到服务器,请在服务器上创建一个新的Classloader元素并将共享库附加到它
    • 要将共享库附加到应用程序,请通过在管理控制台中编辑EAR的属性或通过脚本化部署参数执行附加

  • 讨论中只有我的2美分

    为了快速简便的解决方案,我将属性文件放在PROFILE\u ROOT/properties中,而不是WAS\u HOME/classes中——这个文件夹位于类路径上,它用于存储属性。与/classes相比的一个好处是,它的作用域是概要文件,因此,如果您有不同的概要文件,例如用于测试或集成的概要文件,那么它们可能具有不同的设置

    对于“纯”WebSphere解决方案,这将允许通过控制台管理属性,您可以查看资源环境提供程序(但这是一个相当长、复杂的解决方案):

    我使用的另一个解决方案是向应用程序web.xml添加URL资源引用。例如“url/properties”

    然后使用管理控制台在Websphere中定义URL,以指向“file:///dev.properties“,或”file:///test.properties“例如

    然后在部署时,将URL引用映射到适当的WebSphereURL定义

    现在,您的代码可以对URL进行jndi查找


    这样做的好处是,您可以部署单个代码库,并在部署时自定义以指向不同的URL。

    您可能希望阅读我的答案,了解为什么不建议将项目放置在
    WAS_HOME/classes
    中。在这种情况下,我不同意您的论点。如果他问到如何将特定应用程序的属性外部化,我会像你在回答中提到的那样使用共享库。但他非常明确地要求提供一个选项,使集群中的所有节点上的属性都可用。这仍然没有帮助。对于水平集群,您必须在每个物理节点上执行此操作。AppServer/classes方法不保存工作;它带来的限制多于好处。@Isaac-我仍然认为,与在所有应用程序中配置共享库相比,它更容易、更实用、更少受到人为错误的影响,而且在这种特定情况下(对于集群中的所有服务器而言)更好。此外,共享库在水平集群中也存在完全相同的问题(在所有物理节点+应用程序中都必须这样做)。Downvoter:想解释一下我的答案有什么问题吗?嗨,对不起。我没有解释,因为当时我在打手机。我出于几个原因否决了你的答案。1) 他非常具体地回答了他的问题,提出了一个集群中所有节点都可以使用的解决方案。2) 他没有提到任何关于WAS门户或其他产品的内容,所以您对其他产品使用此目录的观点只是担心可能永远不会发生的事情(大多数情况下)。3) 共享图书馆