Quartz取本項目路徑的問題

爲了項目中可以定期定時的生成某些報表。比如定期生成貨幣匯率表,國家之間的話費通訊費用。於是運用了 Quartz 框架,以任務調度的方式來完成這些任務。

但是在輸出報表的時候,發現 ServletActionContext.getServletContext().getRealPath("/") 獲取不到本 web 的根目錄。後來搜索很多資料,才了解到。 Quartz 是獨立與另個線程,它的上下文不是 struts2 中類 ServletActionContext 的上下文 ( 本項目用 struts2 框架 ) ,而是自己類 JobExecutionContext 的上下文。所以是取不到本項目的根目錄。

後來,我采用的方法是, ClassLoader 类提供的一些方法解決的。

先獲得 classpath 的路徑,然後解析出本項目的根目錄,也許這樣編碼兼容性不是很好,但是暫時是這么解決的。部分代碼如下:

String temp = Constant.class.getResource("/").getPath();   // 獲取 classpath 路徑

temp = temp.substring(0, temp.lastIndexOf("WEB-INF"));  //WEB-INF 上一級就是項目的根目錄

File f = new File(temp);

……

應該有更好的解決辦法,希望大家能給出一點建議。

 

這篇文章 http://louisyoo.blog.ccidnet.com/blog-htm-do-showone-uid-41414-type-blog-itemid-217488.html ,對路徑問題做了比較詳細的說明。

1 Constant.class.getResource("").getPath()
得到的是当前类 FileTest.class 文件的 URI 目录。如 \E:\6.0\workspace\28TEL_service\WEB-INF\classes\com.top.tel.constant

2 Constant.class.getResource("/").getPath()
得到的是当前的 classpath 的绝对 URI 路径。如: \E:\6.0\workspace\28TEL_service\WEB-INF\classes

3 Constant.currentThread().getContextClassLoader().getResource("").getPath()
得到的也是当前 ClassPath 的绝对 URI 路径。如: \E:\6.0\workspace\28TEL_service\WEB-INF\classes

4 Constant.class.getClassLoader().getResource("").getPath()
得到的也是当前 ClassPath 的绝对 URI 路径。如: \E:\6.0\workspace\28TEL_service\WEB-INF\classes
5
ClassLoader.getSystemResource("").getPath()
得到的也是当前 ClassPath 的绝对 URI 路径。如: \E:\6.0\workspace\28TEL_service\WEB-INF\classes

你可能感兴趣的:(Web,框架,quartz,Blog,F#)