cad294fad3eaecf6fb602356cb6bc7f77a0fab68.svn-base 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package com.chinacreator.process.job;
  2. import java.util.List;
  3. import java.util.concurrent.CountDownLatch;
  4. import java.util.concurrent.ExecutorService;
  5. import java.util.concurrent.LinkedBlockingQueue;
  6. import java.util.concurrent.ThreadPoolExecutor;
  7. import java.util.concurrent.TimeUnit;
  8. import org.apache.log4j.Logger;
  9. import org.quartz.DisallowConcurrentExecution;
  10. import org.quartz.PersistJobDataAfterExecution;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import com.chinacreator.common.support.util.SpringContextUtil;
  13. import com.chinacreator.process.bean.UserFakeidBean;
  14. import com.chinacreator.process.dao.UserFakeidDao;
  15. import com.chinacreator.process.service.UserFakeidQueryService;
  16. @PersistJobDataAfterExecution
  17. @DisallowConcurrentExecution
  18. public class UserFakeidQueryJob {
  19. private static Logger log = Logger.getLogger(UserFakeidQueryJob.class);
  20. @Autowired
  21. private UserFakeidDao userFakeidDao;
  22. public void doProcess() throws Exception {
  23. log.info("电商伪码查询开始【======");
  24. List<UserFakeidBean> list = null;
  25. long stime = System.currentTimeMillis();
  26. try {
  27. list = userFakeidDao.queryNeedQuery();
  28. log.info("需要查询电商伪码===="+(list == null ? 0 : list.size()));
  29. if(list != null && list.size() > 0){
  30. CountDownLatch threadSignal = new CountDownLatch(list.size());
  31. ExecutorService executorService = new ThreadPoolExecutor(8, 15, 10L, TimeUnit.MINUTES, new LinkedBlockingQueue<Runnable>(), new ThreadPoolExecutor.CallerRunsPolicy());
  32. for (UserFakeidBean bean : list) {
  33. FakeidQueryService fakeidService = new FakeidQueryService(list.size(),threadSignal,bean);
  34. executorService.execute(fakeidService);
  35. }
  36. executorService.shutdown();
  37. try {
  38. executorService.awaitTermination(1L, TimeUnit.MINUTES);
  39. } catch (InterruptedException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45. }
  46. log.info("电商伪码查询结束===="+((System.currentTimeMillis())-stime));
  47. }
  48. }
  49. class FakeidQueryService implements Runnable {
  50. private static Logger logger = Logger.getLogger(ChannelService.class);
  51. private int totalSize;
  52. private CountDownLatch threadSignal;
  53. private UserFakeidBean bo;
  54. public FakeidQueryService(int totalSize,CountDownLatch threadSignal,UserFakeidBean bo){
  55. this.totalSize = totalSize;
  56. this.threadSignal = threadSignal;
  57. this.bo = bo;
  58. }
  59. public void run() {
  60. long startime = System.currentTimeMillis();
  61. UserFakeidQueryService service = SpringContextUtil.getBean(UserFakeidQueryService.class);
  62. String result = service.queryFakeid(bo);
  63. threadSignal.countDown();
  64. logger.info("["+bo.getUserid()+","+bo.getOrderid()+"]:结果="+result+"["+ totalSize+"/"+(totalSize - threadSignal.getCount())+"],花费时间:"+(System.currentTimeMillis()-startime+"/ms"));
  65. }
  66. }