Java使用異步方法時,需注意以下幾點:
1、調用異步方法時,一定要在其他類中調用,在同類中是不生效的。
2、測試時,儘量使用postman去測,用測試類有時候會執行無結果,也沒有不會異常;
3、異步方法是沒有返回值的,因爲方法中的函數 都是異步的,不知道誰先執行結束;
在Spring中調用異步方法:
在方法上使用註解 @Async ,且當前類是在Spring管理類中,其次,在啓動類中添加註解 @EnableAsync
@Async
public void shopScanDetailExportTask(RewardScanCodeDetailShop rewardScanCodeDetailShop) throws IOException {
System.out.println("開始執行");
// 1、添加下載中心數據
OrderDownloadCenterModel downloadCenterModel = this.addOrderDownloadCenter3(rewardScanCodeDetailShop);
// 2、上傳文件
String fileUrl = this.exportOrderFile3(rewardScanCodeDetailShop);
// 3、修改下載中心狀態
downloadCenterModel.setFilePath(fileUrl);
downloadCenterService.updOrderDownloadCenter(downloadCenterModel);
System.out.println("結束執行");
}
/**
* 添加下載中心數據
* @param model
* @return
*/
public OrderDownloadCenterModel addOrderDownloadCenter3(RewardScanCodeDetailShop model) {
OrderDownloadCenterModel downloadCenterModel = model.getDownloadCenterModel();
downloadCenterModel.setType(OrderTypeEnum.TERMINALSCANDETAILS.getValue().shortValue());
downloadCenterService.addOrderDownloadCenter(downloadCenterModel);
return downloadCenterModel;
}
/**
* 創建文件並上傳至阿里雲OSS
* @param model
* @return
* @throws IOException
*/
public String exportOrderFile3(RewardScanCodeDetailShop model) throws IOException {
List<RewardScanCodeDetailShop> list = this.selectExcelShopList(SearchUtil.getSearch(model));
if (!AirUtils.hv(list)) {
RewardScanCodeDetailShop detailShop = new RewardScanCodeDetailShop();
list.add(detailShop);
}
String fileName = (new StringBuffer()).append("ZDSMMX").append(TimeUtilis.getCurrentFormatTime("yyyyMMddHHmmss")).append(".csv").toString();
FileItem fileItem = ExcelTools.exportByFile(list, 1);
return downloadCenterService.getFileUrl(fileName, fileItem.getContent());
}
本文是銜接上一篇文件來的: Java上傳文件至阿里雲OSS