From 52140edce63388a2b194372f78db96f078bdd3db Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Thu, 11 Jan 2018 15:17:26 +0800 Subject: [PATCH] update --- .../manage/task/CustomerImpressionTask.java | 31 ++++++++++++-- .../impls/CustomerImpressionImplTest.java | 42 +++++++++++++++---- 2 files changed, 62 insertions(+), 11 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java index d64c1ce29..7e697d888 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java @@ -1,6 +1,10 @@ package au.com.royalpay.payment.manage.task; +import java.util.ArrayList; import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import javax.annotation.Resource; @@ -24,11 +28,32 @@ public class CustomerImpressionTask { @Resource private CustomerImpressionService customerImpressionService; + private ThreadPoolExecutor generatePool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); + @Scheduled(cron = "0 0 3 * * ?") public void generate() { List clients = clientMapper.listValidClient(); - clients.forEach(p -> { - customerImpressionService.generate(p.getIntValue("client_id")); - }); + List> splitList = new ArrayList<>(); + for (int i = 0; i < clients.size(); i+=200) { + if(i+200>clients.size()){ + splitList.add(clients.subList(i,clients.size())); + }else { + splitList.add(clients.subList(i,i+200)); + } + + } + for (List splitClients : splitList) { + Runnable task = () -> splitClients.forEach((p)->{ + System.out.println("当前执行到"+p.getIntValue("client_id")); + customerImpressionService.generate(p.getIntValue("client_id")); + }); + generatePool.execute(task); + } + generatePool.shutdown(); + try { + generatePool.awaitTermination(5, TimeUnit.HOURS); + } catch (InterruptedException e) { + e.printStackTrace(); + } } } diff --git a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java index 53f8d535c..df64a02c2 100644 --- a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java +++ b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java @@ -1,9 +1,12 @@ package au.com.royalpay.payment.manage.apps.core.impls; -import au.com.royalpay.payment.manage.apps.core.CustomerImpressionService; -import au.com.royalpay.payment.manage.mappers.system.ClientMapper; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; -import com.alibaba.fastjson.JSONObject; +import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; @@ -11,9 +14,10 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; -import java.util.List; +import com.alibaba.fastjson.JSONObject; -import javax.annotation.Resource; +import au.com.royalpay.payment.manage.apps.core.CustomerImpressionService; +import au.com.royalpay.payment.manage.mappers.system.ClientMapper; /** * Created by wangning on 05/01/2018. @@ -26,6 +30,9 @@ public class CustomerImpressionImplTest { private CustomerImpressionService customerImpression; @Resource private ClientMapper clientMapper; + + private ThreadPoolExecutor generatePool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); + @Test public void generate() throws Exception { customerImpression.generate(9); @@ -34,9 +41,28 @@ public class CustomerImpressionImplTest { @Test public void generateAll(){ List clients = clientMapper.listValidClient(); - clients.forEach(p -> { - customerImpression.generate(p.getIntValue("client_id")); - }); + List> splitList = new ArrayList<>(); + for (int i = 0; i < clients.size(); i+=200) { + if(i+200>clients.size()){ + splitList.add(clients.subList(i,clients.size())); + }else { + splitList.add(clients.subList(i,i+200)); + } + + } + for (List splitClients : splitList) { + Runnable task = () -> splitClients.forEach((p)->{ + System.out.println("当前执行到"+p.getIntValue("client_id")); + customerImpression.generate(p.getIntValue("client_id")); + }); + generatePool.execute(task); + } + generatePool.shutdown(); + try { + generatePool.awaitTermination(5, TimeUnit.HOURS); + } catch (InterruptedException e) { + e.printStackTrace(); + } } } \ No newline at end of file