一个关于properties文件读取的奇怪问题?在线等! 工作目录的位置是在哪里,我用的是websphere 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的上面程序是放在web目录下的jsp文件,而调用的db.properties是放在servlets目录下的,这种情况就会出现上面的问题而另外一种情况是,我用放在servlets目录下的javaBean来调用db.properties文件,就不会出现上面的问题,请问这是什么原因javabean的程序代码:try { InputStream is = getClass().getResourceAsStream("db.properties"); prop.load(is); if (is != null) is.close(); } catch (IOException e) { System.out.println("[ConnectionPool]打开文件时出现错误"); } //---------------------------------------------------------------------- //从Property文件中读取Property //---------------------------------------------------------------------- String driver = prop.getProperty("drivers"); 贴一段代码给你看: 每次调实际是在cache中调,不是你的程序问题.getBundle---> getBundleImpl-->..... Object lookup = findBundleInCache(loader, bundleName, defaultLocale); if (lookup == NOTFOUND) { throwMissingResourceException(baseName, locale); } else if (lookup != null) { return (ResourceBundle)lookup; } 估计是你的PropertyResourceBundle 类的问题,它在执行getBundle("db")的时候先看看 类型为db的Properties是否创建,如果未创建则new一个,否则不作任何操作,因为配置文件一般来说是在系统启动时候会读取到内存,以后的属性的访问完全是内存操作,而不是每次都去读取配置文件,这样效率太低,而且意义不大而你下面在javabean中的语句则是每次调用方法的时候都会先读取配置文件,当然每次都是最新的信息了 第一次调JSP调入文件,然后每次都从Cache中调. 不好意思,findBundleInCache好像不是标准的api,我在sun的网站的java.util.resourcebundle里面都找不到该方法 对.findBundleInCache是私有的函数,在文档中是找不到的,我是断点调试才找到的.实际很简单,做一个测试程序就知道了. 几个疑惑:1。我上面的两种方法到底有什么区别,是不是这样jsp的那段代码将db.properties读入缓存,以后怎么变都不会再读取,除非是重启服务器javabean的那段代码,是每次都动态读却db.properties中的内容2。那么如果不重启服务器,重启web服务能否将缓存释放掉,如果是这样的话,它的执行过程好像和jsp就不一样,因为如果不该动jsp代码,重新启动web服务器或web服务,jsp文件都不会重新编译 可是它的参数loader, bundleName, defaultLocale,basename,我都不知道如何填写,大概能解释一下吗,如何调用一些默认的值呢 最关键是bundleName,就是你的"db". basename="db" also.1. 对. 2. 我不是很清楚服务器与web服务器的关系,但我知道你至少需要重启(servlet engine).因为虽然jsp生成的类不会变,但每次重启servlet engine后,内存中的映像消失,下一次服务就必须再调入该类.就可以读入新的db.properties中的内容. 你是要写测试程序吗? 这些参数都是缺省的,除bundleName外. 再有,你不能直接调用findBundleInCache(...), 因为它是私有的. 大家来看一下,关于文件读写的问题 java中如何将字符串赋给数组 大家来看看这个为什么只能放在默认包内 请教大家,怎么生成一个4位长度的中文随机字符串? 如何(停止)关闭GUI程序? abstract父类要定义static方法,怎么定义? extends,emplements深层次的探讨 如何才能跳出Enumeration的死循环??? jar文件怎么使用,JBuild中怎么把程序打包成jar文件。 当jTextField里面什么都不输入时,字符是多少? 我都帖了好几边了 ,大家谁能帮我解决JTREE刷新问题(100)酬谢 关于与后台连接的问题
而另外一种情况是,我用放在servlets目录下的javaBean来调用db.properties文件,就不会出现上面的问题,请问这是什么原因
javabean的程序代码:
try {
InputStream is = getClass().getResourceAsStream("db.properties");
prop.load(is);
if (is != null)
is.close();
} catch (IOException e) {
System.out.println("[ConnectionPool]打开文件时出现错误");
} //----------------------------------------------------------------------
//从Property文件中读取Property
//----------------------------------------------------------------------
String driver = prop.getProperty("drivers");
getBundle---> getBundleImpl-->.....
Object lookup = findBundleInCache(loader, bundleName, defaultLocale);
if (lookup == NOTFOUND) {
throwMissingResourceException(baseName, locale);
} else if (lookup != null) {
return (ResourceBundle)lookup;
}
的时候先看看 类型为db的Properties是否创建,如果未创建则new一个,否则
不作任何操作,因为配置文件一般来说是在系统启动时候会读取到内存,以
后的属性的访问完全是内存操作,而不是每次都去读取配置文件,这样效率
太低,而且意义不大而你下面在javabean中的语句则是每次调用方法的时候都会先读取配置文件,
当然每次都是最新的信息了
1。我上面的两种方法到底有什么区别,是不是这样
jsp的那段代码将db.properties读入缓存,以后怎么变都不会再读取,除非是重启服务器
javabean的那段代码,是每次都动态读却db.properties中的内容2。那么如果不重启服务器,重启web服务能否将缓存释放掉,如果是这样的话,它的执行过程好像和jsp就不一样,因为如果不该动jsp代码,重新启动web服务器或web服务,jsp文件都不会重新编译
1. 对.
2. 我不是很清楚服务器与web服务器的关系,但我知道你至少需要重启(servlet engine).因为虽然jsp生成的类不会变,但每次重启servlet engine后,内存中的映像消失,下一次服务就必须再调入该类.就可以读入新的db.properties中的内容.