【发布时间】:2013-07-28 14:07:02
【问题描述】:
我正在努力寻找一种解决方案,根据不同的环境(dev、prod)从不同的地方访问配置文件。
这是我项目的大致布局。
│ pom.xml
└───src
└───main
├───java
│ ConfigurationLoader.java
├───resources
│ conf1.properties
└───webapp
│ web.xml
└───WEB-INF
ConfigurationLoader 是一个自我描述的类,应该是一些普通的单例,在整个应用程序中静态可用。
在dev 环境中,它应该从类路径根目录加载conf1.properties,但在prod 环境中,它应该在容器的根文件夹中找到它们(例如%TOMCAT_HOME%\bin)。
对于这种选择性的属性加载,如何正确实现ConfigurationLoader?
谢谢
UPD:
我对@987654330@ 实现和属性文件的位置更感兴趣。问题是ConfigurationLoader 如何定位这些文件。比如:
String path = "/conf1.properties";
File confFile;
switch (environment) {
case "dev": //classpath
URI location = ConfigurationLoader.class.getResource(path).toURI();
confFile = new File(location);
break;
case "prod": //root (?)
confFile = new File(path);
break;
}
Properties p = new Properties(confFile);
这里有几个问题:
我应该如何将环境变量从 Maven 传递给代码(在配置文件中定义或其他)?我不想过滤 java 类,并且可能预加载另一个只有环境条目的属性文件。另外,我认为我无法在生产平台上修改系统属性 (
-Denv=whatever)。如果属性文件需要包含某些资源的路径以供其他系统组件访问(例如,
applicationContext.xml用于 spring,它也应该位于dev的类路径或bintomcat 的类路径中?文件夹)?这些路径应该是什么样子,我需要如何在我的代码中解决它们,以避免ConfigurationLoader部分的代码重复?
是否有机会在 maven 中更多地解决它而在代码中更少地解决它,或者还有哪些其他方法存在?
【问题讨论】:
-
你不能定义两种环境并用 if 语句检查你当时正在使用什么环境吗?这可能在您的设置文件或类似文件中。
标签: java maven properties configuration