我想从静态块中的属性文件中获取数据库连接参数。属性文件位置为WEB-INF/classes/db.properties
。
我更愿意使用getResourceAsStream()
方法。我尝试了很多方法,但他们都返回了null
。
private static Properties prop = new Properties();
static{
try {
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext) facesContext.getExternalContext().getContext();
InputStream inputStream = servletContext.getResourceAsStream("/db.properties");
InputStream is = prop.getClass().getResourceAsStream("/db.properties");
if(inputStream!=null){//it is null
prop.load(inputStream);
}
if(is!=null){//it is null
prop.load(is);
}
} catch (Exception e) {
e.printStackTrace();
}
}
这是如何引起的?如何解决?
答案 0 :(得分:1)
正如Thufir在评论中写道,从Java代码中读取属性有一个很好的教程:http://jaitechwriteups.blogspot.ca/2007/01/how-to-read-properties-file-in-web.html
/**
* Some Method
*
* @throws IOException
*
*/
public void doSomeOperation() throws IOException {
// Get the inputStream
InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream("myApp.properties");
Properties properties = new Properties();
System.out.println("InputStream is: " + inputStream);
// load the inputStream using the Properties
properties.load(inputStream);
// get the value of the property
String propValue = properties.getProperty("abc");
System.out.println("Property value is: " + propValue);
}
答案 1 :(得分:1)
InputStream inputStream = servletContext.getResourceAsStream("/db.properties");
此尝试期望文件位于/WebContent/db.properties
。
InputStream is = prop.getClass().getResourceAsStream("/db.properties");
此尝试期望它至少与java.util.Properties
类属于同一档案(JAR)。
这些尝试都不会读取您放在/WEB-INF/classes/db.properties
中的文件。您可以通过两种方式解决此问题。
将其直接移至/WEB-INF
文件夹/WEB-INF/db.properties
并按以下方式加载:
InputStream input = externalContext.getResourceAsStream("/WEB-INF/db.properties");
(请注意,您不需要从JSF的引擎盖下拖出ServletContext
;已经有了委托方法)
相对于/WEB-INF/classes
中也存在的类加载它,例如当前的托管bean类。
InputStream input = Bean.class.getResourceAsStream("/db.properties");
或者只是使用上下文类加载器,它可以访问所有内容。
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
(请注意缺少/
前缀)