代码之家  ›  专栏  ›  技术社区  ›  wds

如何管理javawebapps中的嵌入式配置文件和库?

  •  15
  • wds  · 技术社区  · 17 年前

    我目前正在开发一个j2ee项目,该项目已经测试了一段时间。现在我们只是在解决部署过程中的一些问题。具体来说,war中嵌入了许多文件(一些xml文件和.properties),需要根据您是在开发、测试还是生产环境中部署不同的版本。诸如日志级别、连接池等。

    所以我想知道这里的开发人员是如何构建部署Web应用程序的流程的。您是否将尽可能多的配置卸载到应用程序服务器?在部署之前,您是否以编程方式替换设置文件?在构建过程中选择版本?手动编辑战争?

    5 回复  |  直到 17 年前
        1
  •  8
  •   Steve B.    17 年前

    我认为,如果属性是特定于机器/部署的,那么它们就属于机器。如果我要在战争中结束一切,它应该是drop-inable,这意味着它运行的机器没有特定的东西。如果战争中有依赖于机器的属性,这个想法就会破灭。

    我喜欢做的是用properties.example文件构建一个项目,每台机器都有一个.properties,它位于战争可以访问它的地方。

    另一种方法是让蚂蚁执行任务,例如开发战争、阶段战争、生产战争,并在战争构建中嵌入项目的属性集。我不太喜欢这个,因为作为项目构建的一部分,你最终会在单个服务器上拥有文件位置等信息。

        2
  •  6
  •   Bill.D    17 年前

    我想,如果你有少量特定于机器的属性,那么你也可以将它们指定为-D属性。Commons Configuration提供了一种将属性文件与系统属性组合的简单方法。

    我们在服务器上配置连接池。我们为每个环境命名相同的连接池,并简单地将分配给每个环境的服务器指向相应的数据库。应用程序只需要知道一个连接池名称。

        3
  •  4
  •   Community Mohan Dere    9 年前

    我想是wrt配置文件 Steve's 这个答案是迄今为止最好的。我建议将外部文件设置为与war文件的安装路径相关,这样您就可以在一台具有不同配置的服务器上安装多个war。

    例如,如果我 dev.war /opt/tomcat/webapps/dev ,然后我会使用 ServletContext.getRealPath 找到基本文件夹和war文件夹名称,这样配置文件就会存在 ../../config/dev 相对于战争,或 /opt/tomcat/config/dev 绝对。

    我也同意 Bill 关于在这些外部配置文件中尽可能少地放入内容。根据您的环境使用数据库或JMX来存储尽可能多的数据。Apache Commons Configuration有一个 nice object

    unknown 拥有所有的libs WEB-INF/lib war文件中的文件夹(自打包)。优点是应用程序的每次安装都是自主的,您可能会同时使用不同版本的库来构建不同的战争版本。

    缺点是它将使用更多的内存,因为每个web应用程序都有自己的类副本,由自己的类加载器加载。

    如果这引起了真正的担忧,那么您可以将jar放在servlet容器的公共库文件夹中( $CATALINA_HOME/lib 对于tomcat)。但是,在同一服务器上运行的web应用程序的所有安装都必须使用相同版本的库。(实际上,这并不是严格正确的,因为你可以在个人中放置覆盖版本 WEB-INF/lib 如果需要,可以使用文件夹,但维护起来会变得相当混乱。)

    在这种情况下,我会使用InstallShield或 NSIS

        4
  •  2
  •   Tusc    17 年前

    我通常创建两个属性文件:

    • 一个用于应用程序中嵌入的应用程序细节(消息、内部“魔法”词),
    • 酷家伙使用JMX来维护他们的应用程序配置文件(配置文件可以实时修改,无需重新部署),但它对我的需求来说太复杂了。

    服务器(静态?)库:我强烈建议在我的应用程序中使用服务器库,因为它会增加对服务器的依赖性:

    1. 国际海事组织,我的应用程序必须是“自我打包的”:放弃我的战争,仅此而已。我见过有20 Mbs罐子的战争,这对我来说并不令人不安。
    2. 将依赖关系放入应用程序(war、ear、wathever)是自文档化的:你知道你的应用程序依赖于什么库。使用服务器库,你必须清楚地记录这些依赖关系,因为它们不太明显(很快你的开发人员就会忘记这一点)。
    3. 如果你升级你的应用服务器,你所依赖的服务器库也会发生变化。AppServer编辑器不应该保持其内部库在不同版本之间的兼容性(大多数情况下,他们不这样做)。

        5
  •  0
  •   Brian Deterling    17 年前

    我把所有配置都放在数据库中。容器(Tomcat、WebSphere等)允许我访问初始数据库连接,从那时起,所有内容都从数据库中出来。这允许在没有停机时间(或至少没有重新部署)的情况下进行多个环境、集群和动态更改。特别好的是能够动态更改日志级别(尽管您需要管理员屏幕或后台刷新来获取更改)。显然,这只适用于启动应用程序不需要的东西,但一般来说,您可以在启动后很快访问数据库。

    推荐文章