spring 异步上传文件给第三方


import java.util.concurrent.Future;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;

import com.itrus.laweyecloud.pojo.FileOfBillWrap;
/**
 * 测试异步的执行文件上传,可以成功的支持多线程和异步
 * @author 
 *
 */
@Component
public class AsyncTaskFileUploadTaskService {

	@Autowired
	private FileUpLoadTaskService fileUpLoadTaskService;
	
	@Async
	public void excuteAsyncTaskFileUpload(FileOfBillWrap fileOfBillWrap){
		try {
			fileUpLoadTaskService.uploadFileToWuzhong(fileOfBillWrap);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	@Async
	public Future<Boolean> excuteAsyncTaskFileUploadWithResult(FileOfBillWrap fileOfBillWrap){
		boolean result = false;
		try {
			result = fileUpLoadTaskService.uploadFileToWuzhong(fileOfBillWrap);
			return new AsyncResult<Boolean>(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new AsyncResult<Boolean>(result);
	}
}


import org.apache.commons.collections.map.HashedMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;
import java.util.concurrent.Future;

/**
 * @Author 
 * @Description
 * @Date Created in 2018/1/24
 * 定时上传本地文件
 * 每隔10分钟执行一次
 * 1:判断队列是否为空,空则执行步骤2,否则不执行
 * 2:查询fileOfBill表(source为1,isUpLoad为false)
 * 3:调用队列上传文件
 */
@Component
@Transactional(rollbackFor = Exception.class)
public class FileUpLoadTask {

    private final static Logger logger = LoggerFactory.getLogger(FileUpLoadTask.class);

    @Autowired
    private FileOfBillService fileOfBillService;

    @Autowired
    private ThreadPoolManager tpm;

    public static final String LOCK = "FileUploadTaskLock";

    @Autowired
    private FileUpLoadTaskService fileUpLoadTaskService;
    @Autowired
    AsyncTaskFileUploadTaskService asyncTaskFileUploadTaskService;

    @Scheduled(cron = "0/10 * * * * ?")
    public  void upLoadFile() {
        synchronized (LOCK){
            // 1:查询fileOfBill表
            Map<String, Object> p = new HashedMap();
            p.put("isUpload", false);
            p.put("source", ComNamesOfFile.SOURCE_1);
            try {
                List<FileOfBill> list = fileOfBillService.getListByParam(p);
                List<FileOfBillWrap> fileOfBillWraps = fileOfBillService.downLoadFile(list);

                // 2:调用队列上传文件
                for (FileOfBillWrap fileOfBillWrap : fileOfBillWraps) {
                    try {
                    	System.out.println("Invoking an asynchronous method. "+ Thread.currentThread().getName());
                        //fileUpLoadTaskService.uploadFileToWuzhong(fileOfBillWrap);
                    	/**
                    	 * Result from asynchronous process - true
						   Invoking an asynchronous method. pool-3-thread-1
						   Continue doing something else. 
                    	 */
                    	Future<Boolean> future = asyncTaskFileUploadTaskService.excuteAsyncTaskFileUploadWithResult(fileOfBillWrap);
                        while (true) {  ///这里使用了循环判断,等待获取结果信息
                            if (future.isDone()) {  //判断是否执行完毕
                                System.out.println("Result from asynchronous process - " + future.get());
                                break;
                            }
                            System.out.println("Continue doing something else. ");
                            Thread.sleep(1000);
                        }
                    } catch (Exception e) {
                        continue;
                    }
                }
            } catch (Exception e) {
                logger.error("Class FileUpLoadTask, timed task upLoadFile execution exception", e);
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值