我正在努力寻找一种解决方案来根据不同的环境(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
正确实现这种选择性属性加载?
谢谢
升级版:
我对ConfigurationLoader
实现和属性文件位置更感兴趣。问题是如何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
或该bin
tomcat 的文件夹中)怎么办?这些路径应该是什么样子,我需要如何在我的代码中解决它们以避免该ConfigurationLoader
部分的代码重复?
是否有机会在 Maven 中更多地解决它而在代码中更少地解决它,或者存在哪些其他方法?