我有一个项目CouponSystem,它有一个config / cs.properties文件。 该项目导出为cs.jar并添加到另一个导出web-app csee.war
的项目中当CouponSystem运行时(作为java应用程序),它会加载正确读取config / cs.properties的Utils类。
当csee在服务器(tomcat7)上运行时,我找不到该文件。在创建了一些方法来了解tomcat查找该文件的位置之后,我意识到它在tomcat / bin目录中查找 - 所以如果我把文件放在tomcat / bin / cs.properties中:一切正常。 (不是解决方案,只是为了解问题)
我的问题是 - 将cs.properties放在web-app环境中的正确方法是什么,以及如何告诉非servlet类(Utils)找到它?
谢谢。
public class Utils {
public static final String CONFIG_FILE = "cs.properties";
//public static final String CONFIG_FILE = "WEB-INF/config/cs.properties";
// builds a hashmap from properties file
public static void loadSystemParameters() {
// this code only to know "the default current dir"
File f = new File("."); // current directory
File[] files = f.listFiles();
for (File file : files) {
if (file.isDirectory()) {
System.out.print("directory:");
} else {
System.out.print(" file:");
}
try {
System.out.println(file.getCanonicalPath());
} catch (IOException e) {
e.printStackTrace();
}
}
Utils.logMessage(new Utils(), Severity.DEBUG, "loadSystemParameters() invoked");
// construct a List<Customer> to return the data
sysParams = new HashMap<String, String>();
Properties properties = new Properties();
try {
properties.load(new FileReader(CONFIG_FILE));
for(String propName : properties.stringPropertyNames()){
sysParams.put(propName, properties.getProperty(propName));
}
Utils.logMessage(new Utils(), Severity.DEBUG, "properties from file loaded to a hashmap");
} catch (IOException e) {
Utils.logMessage(new Utils(), Severity.ERROR, "cannot load properties file ! exiting.");
e.printStackTrace();
//System.exit(0);
}
}
}
答案 0 :(得分:0)
最简单的方法是将文件放在WEB-INF/classes
中,然后从类路径加载它:
Properties p = new Properties();
// load the file at WEB-INF/class/cs.properties
p.load(Utils.class.getResourceAsStream('/cs.properties'));
答案 1 :(得分:0)
实现的一种方法是参数化包含属性文件的目录路径。假设,你的名字是CONFIG_HOME。您可以使用JVM参数将CONFIG_HOME设置为System属性。然后在您的代码中,您可以获得CONFIG_HOME路径:
File f = new File(System.getProperty("CONFIF_HOME")); // your config directory
这种方法可以让您灵活地不在战争中打包属性文件。