iBatis 使用 OSCache 作缓存与 java.io.FileNotFoundException 异常
2009-09-22 00:00:00 来源:WEB开发网这种异常只会发生在 Windows 平台上,可以说是 iBatis 的一个 Bug,大约 iBatis 的开发测试人员都比较热衷于 Unix 族系的平台,而忽略了 Windows 下的兼容性测试。
出现 FileNotFoundException 异常的情形是这样的:Windows7 + iBatis2.3.0.677 + OSCache2.4.1。
iBatis 中配置使用 OSCache 缓存,在映射文件 Product.xml 中有如下声明片断:
1.<cacheModel type="OSCACHE" id="productCache">
2. <flushOnExecute statement="Product.insert"/>
3. <flushOnExecute statement="Product.delete"/>
4.</cacheModel>
5.
6.<select id="getById" cacheModel="productCache" parameterClass="int" resultClass="Product">
7. select id, name,description as desc1 from test_product where id = #value#
8.</select>
OSCache 的 oscache.properties 中指明用磁盘文件缓存数据,注意以下几个配置:
01.#不缓存到内存
02.cache.memory=false
03.
04.#缓存持久化实现类,磁盘持久化监听器
05.cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener
06.
07.#缓存磁盘路径,以后注意观察该目录生成的内容
08.cache.path=e:\\OSCache\\cache
09.
10.#选择一种缓存算法,还可选 FIFOCache、UnlimitedCache
11.cache.algorithm=com.opensymphony.oscache.base.algorithm.LRUCache
Java 测试代码:
1.public static void main(String[] args) throws Exception{
2. Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
3. SqlMapClient sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
4. System.out.println(sqlMapClient.queryForObject("Product.getById",5));
5.
6. //后面同样的查询将不再查询数据库,而是直接使用前面执行放在缓存中的内容
7. System.out.println(sqlMapClient.queryForObject("Product.getById",5));
8.}
更多精彩
赞助商链接