1.客户端网页下载文件, 如果文件比较大,后台要进行压缩在传输给客户端。
2.后台进行压缩以后,要保存到服务器硬盘上, 当下次请求下载,则直接传输。
3.当请求下载的压缩文件不存在,需要查询数据,生成csv,最后将多个文件进行压缩保存到服务器硬盘上。
4.多线程进行查询,单线程进行压缩。
先看一个方法:
public String accountingVerificationExport(String zipFileName) {
String zipSrc = "";
try {
/**
* 导出到本地, 然后压缩成zip,并返回zip文件地址
*/
zipSrc = exportToLocation(zipFileName);
} catch(Exception ex) {
LOGGER.info("exec accountingVerificationExport error.{}", ex.getMessage());
}
return zipSrc;
}
方法的参数zipFileName是指定压缩之后文件名.exportLocation
/**
* 启动四个线程,同步导出
* @param zipFileName
* @return
*/
private String exportToLocation(String zipFileName) {
ResourceLoadUtil rlu = new ResourceLoadUtil("/hx.properties");
final Properties prop = rlu.getProp();
final String exportLocation = prop.getProperty("hx.export.location.href");
final CountDownLatch end = new CountDownLatch(4); //子线程
final String [] typeName = new String[]{"receipt","output1","output2","back"};
final List<String> fileSrcs = new ArrayList<String>();// 用于存放生成的文件名称
final SessionFactory sessionFactory = accountingVerificati