很早就想在系统引入文件事务的概念了,可是自己又没有一个完整的方案。通过上网学习知道了apache的文件事务处理工具,这些天下载下来做了一些例子和使用。
虽然比较简单但是还是分享出来以供需要的人能够快速使用:
引入的包有:
示例代码如下:
public void testConn() throws Exception{
FileResourceManager frm = null;
String txId = null;
try {;
// 文件最终的存储目录
String toDir = "g:\\imageroot\\AA";
// 事务处理的工作目录,当事务运行时会在次目录下建立一个以txId为名字的目录来存放事务处理的文件
String tempDir = "g:\\imageroot\\workDir";
// 创建文件操作实例
frm = new FileResourceManager(toDir, tempDir, false, loggerFacade, true);
// 启动文件操作实例
frm.start();
// 获取文件操作事务句柄
txId = frm.generatedUniqueTxId();
// 启动文件操作事务
frm.startTransaction(txId);
// 删除文件,1.txt为文件名存储在toDir目录下
frm.deleteResource(txId, "1.txt");
// 添加文件,会在workDir/%txId%下创建2.txt文件
frm.createResource(txId, "2.txt");
OutputStream thumbNailOut = frm.writeResource(txId, "2.txt");
thumbNailOut.write("2".getBytes());
thumbNailOut.flush();
thumbNailOut.close();
// 提交事务将workDir/%txId%目录下的文件覆盖到toDir中并且删除%txId%目录
frm.commitTransaction(txId);
} catch (Exception e) {
if(null != txId)
// 回滚事务,删除%txId%目录
frm.rollbackTransaction(txId);
logger.error("事务处理失败!", e);
}finally{
if(null != frm)
// 停止文件操作实例
frm.stop(FileResourceManager.SHUTDOWN_MODE_NORMAL);
}
}