2009-10-25 49 views
3

我有一个GlassFish/j2ee应用程序,我在一个盒子上开发,生产是一个远程盒子。 我有一个制作文件的功能,而且我需要根据我的开发盒或制作文件的位置不同。 什么是自动切换方式,所以我不必根据它的部署位置来编辑源文件?开发和生产的属性

+0

这些文件是相对于您的Web应用程序的安装目录还是部署目录之外的文件? – rsp 2009-10-25 16:47:43

+0

外部部署目录 – bmw0128 2009-10-26 15:25:38

回答

1

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

+0

系统属性是全局的。这是一个不好的习惯(说一个人不得不撤销在一个库中使用System.properties的问题,这个应用程序只能被一个独立的应用程序使用,被许多人使用的网络应用程序 - 哦记忆体) – 2009-10-25 16:27:38

+0

是的,它们对JVM而言是全球性的。您是否告诉我您将生产应用程序和非生产应用程序混合在同一个JVM中?在大多数情况下,我会同意,使用系统属性是一个不好的举动,但这种事情恰好是*系统属性的用途。 – skaffman 2009-10-25 18:17:39

+0

这会假设你的应用服务器只运行一个需要知道存储文件夹的web应用。在网络应用上下文中设置属性可能会更好。 – rsp 2009-10-25 19:48:50

0

本质上,您正试图存储随您的环境而变化的任意数据。如果您目前在您的应用程序(即数据库)中执行此操作,我只会将其放在那里。

+1

如果您尝试将PROD数据库同步到DEV并放弃其中的自定义设置,则会出现问题。 – 2009-10-25 15:31:01

1

把你需要的信息放在JNDI中 - 这就是它的设计目的。

考虑让你的应用程序拒绝做任何事情,如果信息不存在。

2

您可以使用properties文件并在此配置文件中外部化特定于环境的内容(如“文件位置”)。在构建时提供足够的值(例如,使用带有Maven的filtering and profiles)。将该文件包含在应用程序中或在类路径的某个地方提供。