Jakarta ee 提供jee应用程序的属性

Jakarta ee 提供jee应用程序的属性,jakarta-ee,Jakarta Ee,一段时间前,我一直在阅读一些关于如何为我的jee项目提供应用程序属性的文章 我所说的应用程序属性是指例如数据库所在的位置,或者用户或密码 有几种方法可以实现这一目标: 使用project.properties文件。问题: 关键信息(用户、密码、API密钥…在此文件中) 此信息可以根据目标机器而更改(我可以使用user1设置一台带有mysql的机器,另一方面,我可以使用user2设置一台带有mysql的机器)。不应在源代码上维护此文件的内容 使用操作系统环境变量。 有些人更喜欢用这种方式提供

一段时间前,我一直在阅读一些关于如何为我的jee项目提供应用程序属性的文章

我所说的
应用程序属性
是指例如数据库所在的位置,或者用户或密码

有几种方法可以实现这一目标:

  • 使用project.properties文件。问题:
    • 关键信息(用户、密码、API密钥…在此文件中)
    • 此信息可以根据目标机器而更改(我可以使用
      user1
      设置一台带有mysql的机器,另一方面,我可以使用
      user2
      设置一台带有mysql的机器)。不应在源代码上维护此文件的内容
  • 使用操作系统环境变量。
    • 有些人更喜欢用这种方式提供属性。然而,我认为这并不是一个更安全的方法。任何在机器上获得访问权限的人都将能够读取这些环境变量的内容
  • 我也读过,它可以使用
    web.xml
    ,但我不知道如何才能实现我的目标

  • 有什么最佳实践指南吗?

    我认为你文章的第三点可以被视为最佳实践。 您可以控制web.xml中的设置,并针对不同的环境使用不同的设置。要实现这一点,可以在运行时传入属性文件并从中读取

    <context-param>
        <param-name>propertiesFile</param-name>
        <param-value>propertyFile.properties</param-value>
    </context-param>
    

    这里出现的问题是,任何开发人员都将能够访问此信息。。。不是吗?
    Properties properties = new Properties();
    GenericServlet myServlet = ...;
    String propertyFileName = myServlet.getInitParameter("propertiesFile");
    properties.load(getClass().getClassLoader().getResourceAsStream(propertyFileName));
    Object myProperty = properties.get("myProperty");