Java 在JAR中包含属性/配置文件是一种不好的做法吗?
例如: MyApp是一个web应用程序,它包含一个属性文件(server.properties),该文件描述应用程序的配置数据(例如服务器名称)。在开发阶段,server.properties位于它自己的IDE项目文件夹中(它的逻辑位置) 现在是时候部署MyApp了。IDE使得jar类文件和支持的配置文件变得非常简单。现在,我们只需将Jar放入适当的web容器中,然后就可以 一周后。。。MyApp使用的服务器配置数据需要更改。哪个更有意义 A.修改ideland中的server.properties文件,并生成一个全新的jar文件。重新部署。(这意味着为了简单的配置更改而跳转应用程序) B.打开已经部署的Jar并修改server.properties文件?(如果缓存了server.properties,则可能必须在MyApp中调用刷新功能…但不需要完整的应用程序跳转。还需要记住修改源server.properties,以便将来部署时不会将server.properties还原为旧的服务器名称) 首先,将server.properties置于jar文件的外部。与B的过程非常相似,只是将配置数据保留在jar外部的细微差别(在开发和生产部署之间引入了不同的路径) D.其他: 谢谢 我会和d一起去 尝试从.jar外部加载属性文件,如果失败,则加载内置到jar中的属性Java 在JAR中包含属性/配置文件是一种不好的做法吗?,java,configuration,properties,jar,Java,Configuration,Properties,Jar,例如: MyApp是一个web应用程序,它包含一个属性文件(server.properties),该文件描述应用程序的配置数据(例如服务器名称)。在开发阶段,server.properties位于它自己的IDE项目文件夹中(它的逻辑位置) 现在是时候部署MyApp了。IDE使得jar类文件和支持的配置文件变得非常简单。现在,我们只需将Jar放入适当的web容器中,然后就可以 一周后。。。MyApp使用的服务器配置数据需要更改。哪个更有意义 A.修改ideland中的server.properti
这使您可以在每次构建时推出“现成”配置(如果只需一个文件,还可以降低部署的复杂性),同时使覆盖配置成为可能并相当简单。这取决于具体情况。如果属性文件包含要由应用程序或库的用户更改的数据,则属性文件应位于外部
如果它包含静态数据,而您创建属性文件只是为了避免在源代码中对值进行编码,或者如果文件是本地化字符串,我会将它们留在jar中。至少因为属性文件邀请人们更改值;) 请记住,在J2EE中,不能保证您能够从J2EE环境外部访问文件(没有直接的文件访问) 您必须使用JNDI来指向包含数据的数据源,或者指向部署工件中的属性文件
例如,Websphere默认情况下不允许直接访问文件。我问了一个类似的问题。我们还没有完全弄清楚。但我们正在研究URL资源。其中属性文件直接从SVN读取。除了属性文件之外,不需要更新任何内容。通常情况下,代码从测试迁移到生产时应保持不变。这意味着您不能编辑嵌入的配置文件。此外,您可能会遇到需要更改已部署配置的情况,这通常非常麻烦。因此,我们把配置放在罐子外面 对于java EE应用程序,请考虑JNDI或类路径中的属性文件。 我有一个web应用程序,其中的配置是从一个相邻的web应用程序检索的,只是为了将两者分开。事实证明,这要容易得多
在jar中加载属性。然后使用jar-ed属性作为默认值创建一个新属性。然后从罐外装入。这允许选择自定义属性。我在Web应用程序(WAR)中使用属性文件,但主要用于默认值和或多或少不可变的内容(因为Web应用程序即使可以也不应该更新WAR) 但是,对于像您所说的内容,我使用JNDI。可以将属性定义为web.xml文件中的资源。这样,最坏的情况是更新web.xml,而不是更新应用程序本身 对于某些服务器,有一些方法可以覆盖这些资源值,而根本不涉及战争。例如,在Tomcat中
我通常会为测试、Q/A和生产进行一场战争,并使用Tomcat的上下文xml文件覆盖环境敏感资源。我认为这比构建多个战争或修改战争要好得多,因为我正在测试的应用程序与正在生产的应用程序几乎是相同的。 < P>我认为答案取决于你是否认为你需要对配置文件进行版本控制。(它们可以是生产配置或回归测试配置…)
- 如果您不需要版本控制,那么带有覆盖属性文件的外部属性文件的选项D是一个不错的选项。选项B和C对stuff-ups更开放,但如果您真的在意,您应该使用版本控制:-)
- 如果您需要版本控制,选项A将为您提供更多的控制,但如果您有可能进行多个部署,您可能还希望/需要对每个部署的配置进行版本控制。一个例子是分别部署到测试和生产平台
<!-- try and resolve the config from the filesystem first and then fallback to the classpath -->
<context:property-placeholder location="file:config.properties, classpath:config.properties"
ignore-resource-not-found="true"/>
application.jar
config.properties
java -jar application.jar
# This file contains properties that are used to configure the application
database.url=127.0.0.1
database.port=3306
database.user=root
database.pass=p4ssw0rd