开发和生产环境的属性

3

我有一个GlassFish/j2ee应用程序,在一台电脑上进行开发,而生产环境是远程的。我有一个生成文件的函数,我需要根据我的开发电脑或生产环境将文件位置设置为不同的位置。有没有自动切换的方法,这样我就不必根据部署位置编辑源文件了?


这些文件是相对于您的 Web 应用程序的安装目录还是在部署目录之外? - rsp
4个回答

2
您可以使用一个“属性”文件,将特定于环境的内容(例如“文件位置”)外部化到此配置文件中。在构建时将适当的值放入其中(例如使用 Maven 中的过滤和配置文件)。将此文件包含在应用程序中或使其在类路径上某处可用。

1
最简单的方法是定义一个系统属性,指定数据文件系统位置在哪里。生产应用服务器将定义一个值(在启动脚本中使用java -D),而您的开发应用服务器将定义另一个值。您的应用程序源代码将查询系统属性值(使用System.getProperty())以发现适当的位置。

系统属性是全局的。这是一个不好的习惯(来自一个曾经必须撤销在库中使用 System.properties 的人,该库来自于一个仅被一个独立应用程序使用的库,而现在被许多Web应用程序使用 - 噢,那些回忆)。 - Thorbjørn Ravn Andersen
是的,它们对JVM全局可见。你是在告诉我你会在同一个JVM中混合生产和非生产应用程序吗?在大多数情况下,我同意,使用系统属性是不明智的,但这种情况恰恰是系统属性的用途所在。 - skaffman
这将假设您的应用程序服务器仅运行一个需要知道存储文件夹的Web应用程序。在Web应用程序上下文中设置属性可能更好。 - rsp
将配置放在Web应用程序上下文中比放在源代码中好一点,但仍不理想。您不希望干扰应用程序内部。如果您在同一个JVM中有多个Web应用程序,则使用不同的系统属性来配置它们。 - skaffman
我添加了一个系统属性 "foo",并将其值设置为 "/me/bar/"。 在代码中,我尝试通过以下方式访问:String dir = System.getProperty("foo");但它返回了 null。 我使用得正确吗? - bmw0128
你是如何定义这个属性的?我建议你发布一个新问题来讨论这个。 - skaffman

1
把你需要的信息放在JNDI里 - 这就是它设计的目的。
考虑让你的应用程序拒绝执行任何操作,如果没有那些信息。

0

本质上,您正在尝试存储会根据环境而改变的任意数据。如果您目前在应用程序中进行此操作(即数据库),我会建议将其放入其中。


1
如果您尝试将PROD数据库同步到DEV并破坏那里的自定义内容,这将是一个问题。 - Andrei Taranchenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接