Commit f19a4a3977406d688bc74f4b2ae8ca4a8ad6f4cf

Authored by 游瑞烽
2 parents 163a5e69 3c708086

update

src/main/java/com/bsth/XDApplication.java
... ... @@ -72,7 +72,7 @@ public class XDApplication implements CommandLineRunner {
72 72 @Autowired
73 73 GpsDataLoaderThread gpsDataLoader;
74 74 @Autowired
75   - RfidDataLoaderThread rfidDataLoader;
  75 + RfidDataLoaderThread rfidDataLoaderThread;
76 76  
77 77 @Autowired
78 78 OfflineMonitorThread offlineMonitorThread;
... ... @@ -165,7 +165,7 @@ public class XDApplication implements CommandLineRunner {
165 165 sexec.scheduleWithFixedDelay(scheduleRefreshThread, 10, 120, TimeUnit.SECONDS);//班次更新线程
166 166 sexec.scheduleWithFixedDelay(scheduleLateThread, 140, 20, TimeUnit.SECONDS);//检查班次误点
167 167 sexec.scheduleWithFixedDelay(gpsDataLoader, 100, 2, TimeUnit.SECONDS);//抓取GPS数据
168   - sexec.scheduleWithFixedDelay(rfidDataLoader, 5, 5, TimeUnit.SECONDS);//抓取RFID数据
  168 + sexec.scheduleWithFixedDelay(rfidDataLoaderThread, 10, 20, TimeUnit.SECONDS);//抓取GPS数据
169 169 sexec.scheduleWithFixedDelay(fixedCheckStationCodeThread, 60, 60 * 5, TimeUnit.SECONDS);//检查班次站点编码
170 170  
171 171 sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);//GPS设备掉离线
... ...
src/main/java/com/bsth/data/gpsdata_v2/DataHandleProcess.java
... ... @@ -6,7 +6,6 @@ import com.bsth.data.gpsdata_v2.entity.GpsEntity;
6 6 import com.bsth.data.gpsdata_v2.handlers.*;
7 7 import com.bsth.email.SendEmailController;
8 8 import com.bsth.email.entity.EmailBean;
9   -import com.fasterxml.jackson.databind.ObjectMapper;
10 9 import com.google.common.collect.ArrayListMultimap;
11 10 import org.apache.commons.lang3.StringUtils;
12 11 import org.slf4j.Logger;
... ... @@ -63,13 +62,29 @@ public class DataHandleProcess {
63 62 }
64 63  
65 64 });
  65 + public static CountDownLatch count;
66 66  
67 67 static long lastTime;
68 68  
69 69 public static boolean isBlock() {
70 70 return System.currentTimeMillis() - lastTime > 1000 * 30;
71 71 }
72   -
  72 +
  73 + private void shutdownAndAwaitTermination(ExecutorService pool) {
  74 + pool.shutdown();
  75 + try {
  76 + if (!pool.awaitTermination(500, TimeUnit.MILLISECONDS)) {
  77 + pool.shutdownNow();
  78 + }
  79 + if (!pool.awaitTermination(500, TimeUnit.MILLISECONDS)) {
  80 + logger.error("线程池无法正常终止");
  81 + }
  82 + } catch (InterruptedException e) {
  83 + pool.shutdown();
  84 + Thread.currentThread().interrupt();
  85 + }
  86 + }
  87 +
73 88 public void handle(List<GpsEntity> list) {
74 89 try {
75 90 if (list.size() == 0)
... ... @@ -94,24 +109,36 @@ public class DataHandleProcess {
94 109 }
95 110 Set<Integer> ks = dataListMap.keySet();
96 111 logger.info("analyse gps size: " + list.size() + ", ks: " + ks.size());
97   - CountDownLatch count = new CountDownLatch(ks.size());
  112 + count = new CountDownLatch(ks.size());
98 113  
99   - logger.info(JSON.toJSONString(ks));
  114 + //logger.info(JSON.toJSONString(ks));
100 115 for (Integer index : ks) {
101 116 threadPool.execute(new SignalHandleThread(dataListMap.get(index), count));
102 117 }
103 118  
104 119  
105 120 //等待子线程结束
106   - boolean isNormal = count.await(5000, TimeUnit.MILLISECONDS);
  121 + boolean isNormal = count.await(5, TimeUnit.SECONDS);
107 122 if (!isNormal) {
108 123 try {
  124 + shutdownAndAwaitTermination(threadPool);
  125 + threadPool = Executors.newFixedThreadPool(POOL_SIZE + 1, new ThreadFactory() {
  126 +
  127 + @Override
  128 + public Thread newThread(Runnable r) {
  129 + // TODO Auto-generated method stub
  130 + Thread t = new Thread(r);
  131 + t.setName("GPSProcessor");
  132 +
  133 + return t;
  134 + }
  135 +
  136 + });
109 137 //发送邮件
110 138 EmailBean mail = new EmailBean();
111 139 mail.setSubject("线调GPS处理");
112   - mail.setContent("GPS处理超时,检查日志信息<br/>");
  140 + mail.setContent("GPS处理超时,检查线程栈文件信息<br/>");
113 141 sendEmailController.sendMail("113252620@qq.com", mail);
114   - logger.info(new ObjectMapper().writeValueAsString(list));
115 142 logger.info("DataHandlerProcess:邮件发送成功!");
116 143 } catch (Exception e){
117 144 logger.error("DataHandlerProcess:邮件发送失败!",e);
... ... @@ -142,7 +169,6 @@ public class DataHandleProcess {
142 169  
143 170 @Override
144 171 public void run() {
145   - long start = System.currentTimeMillis();
146 172 try {
147 173 Collections.sort(list, comp);
148 174 GpsEntity gps;
... ... @@ -167,18 +193,12 @@ public class DataHandleProcess {
167 193  
168 194 GpsCacheData.putGps(gps);//历史gps缓存
169 195 } catch (Throwable e) {
170   - logger.error("SignalHandleThread.run1", e);
  196 + logger.error("", e);
171 197 }
172 198 }
173   - } catch (Exception e) {
174   - logger.error("SignalHandleThread.run2", e);
175 199 } finally {
176 200 if (count != null)
177 201 count.countDown();
178   -
179   - StringBuilder sb = new StringBuilder();
180   - sb.append("list size:").append(list.size()).append(" cost:").append(System.currentTimeMillis() - start);
181   - logger.info(sb.toString());
182 202 }
183 203 }
184 204 }
... ...
src/main/resources/application-prod.properties
1   -server.port=9088
2   -#management.port= 9001
3   -#management.address= 127.0.0.1
4   -management.security.enabled=false
5   -management.context-path=/manage
6   -dubbo.use=true
7   -
8   -spring.jpa.hibernate.ddl-auto= update
9   -spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy
10   -#DATABASE
11   -spring.jpa.database= MYSQL
12   -spring.jpa.show-sql= false
13   -spring.datasource.driver-class-name= com.mysql.jdbc.Driver
14   -spring.datasource.url= jdbc:mysql://10.10.200.148:3306/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
15   -spring.datasource.username= root
16   -spring.datasource.password= root
17   -
18   -#DATASOURCE
19   -spring.datasource.max-active=100
20   -spring.datasource.max-idle=8
21   -spring.datasource.min-idle=8
22   -spring.datasource.initial-size=5
23   -
24   -spring.datasource.test-on-borrow=true
25   -spring.datasource.test-on-connect=true
26   -spring.datasource.test-on-return=true
27   -spring.datasource.test-while-idle=true
28   -spring.datasource.validation-query=select 1
29   -
30   -## gps client data
31   -http.gps.real.cache.url= http://10.10.150.24:12580/realGps/all
32   -## gateway real data
33   -http.gps.real.url= http://10.10.200.79:8080/transport_server/rtgps/
34   -## gateway send directive
35   -#http.send.directive = http://10.10.200.79:8080/transport_server/message/
36   -## wxsb
37   -#http.report.url.05= http://192.168.168.154:8088/ygjwsystem_j2ee/clbx/clbx_dd.do
38   -#http.report.url.22= http://192.168.168.154:8088/jgjwsystem_j2ee/clbx/clbx_dd.do
39   -#http.report.url.26= http://192.168.168.154:8088/nhjwsystem_j2ee/clbx/clbx_dd.do
40   -#http.report.url.55= http://192.168.168.154:8088/snjwsystem_j2ee/clbx/clbx_dd.do
41   -http.report.url.05= http://116.228.197.222:8081/ygjwsystem_j2ee/clbx/clbx_dd1.do
42   -http.report.url.22= http://116.247.73.122:9098/jgjwsystem_j2ee/clbx/clbx_dd1.do
43   -http.report.url.26= http://116.236.141.34:8088/nhjwsystem_j2ee/clbx/clbx_dd1.do
  1 +server.port=9088
  2 +#management.port= 9001
  3 +#management.address= 127.0.0.1
  4 +management.security.enabled=false
  5 +management.context-path=/manage
  6 +dubbo.use=true
  7 +
  8 +spring.jpa.hibernate.ddl-auto= update
  9 +spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy
  10 +#DATABASE
  11 +spring.jpa.database= MYSQL
  12 +spring.jpa.show-sql= false
  13 +spring.datasource.driver-class-name= com.mysql.jdbc.Driver
  14 +spring.datasource.url= jdbc:mysql://10.10.200.148:3306/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
  15 +spring.datasource.username= root
  16 +spring.datasource.password= root
  17 +#DATASOURCE
  18 +spring.datasource.max-active=100
  19 +spring.datasource.max-idle=8
  20 +spring.datasource.min-idle=8
  21 +spring.datasource.initial-size=5
  22 +
  23 +spring.datasource.test-on-borrow=true
  24 +spring.datasource.test-on-connect=true
  25 +spring.datasource.test-on-return=true
  26 +spring.datasource.test-while-idle=true
  27 +spring.datasource.validation-query=select 1
  28 +
  29 +## gps client data
  30 +http.gps.real.cache.url= http://10.10.150.24:12580/realGps/all
  31 +## gateway real data
  32 +http.gps.real.url= http://10.10.200.79:8080/transport_server/rtgps/
  33 +## gateway send directive
  34 +#http.send.directive = http://10.10.200.79:8080/transport_server/message/
  35 +## wxsb
  36 +#http.report.url.05= http://192.168.168.154:8088/ygjwsystem_j2ee/clbx/clbx_dd.do
  37 +#http.report.url.22= http://192.168.168.154:8088/jgjwsystem_j2ee/clbx/clbx_dd.do
  38 +#http.report.url.26= http://192.168.168.154:8088/nhjwsystem_j2ee/clbx/clbx_dd.do
  39 +#http.report.url.55= http://192.168.168.154:8088/snjwsystem_j2ee/clbx/clbx_dd.do
  40 +http.report.url.05= http://116.228.197.222:8081/ygjwsystem_j2ee/clbx/clbx_dd1.do
  41 +http.report.url.22= http://116.247.73.122:9098/jgjwsystem_j2ee/clbx/clbx_dd1.do
  42 +http.report.url.26= http://116.236.141.34:8088/nhjwsystem_j2ee/clbx/clbx_dd1.do
44 43 http.report.url.55= http://180.168.216.248:8088/snjwsystem_j2ee/clbx/clbx_dd1.do
45 44 \ No newline at end of file
... ...