Explorar o código

解决可能出现的事务锁

wukai hai 1 semana
pai
achega
ef55712e41

+ 24 - 18
jjt-biz/src/main/java/com/jjt/biz/service/impl/BizObjMetricsServiceImpl.java

@@ -835,11 +835,14 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
         List<AlarmRecord> updateRList = new ArrayList<>();
         List<HlEvent> addEList = new ArrayList<>();
         List<HlEvent> updateEList = new ArrayList<>();
+        List<BizObjMetrics> updateList = new ArrayList<>();
         omList.stream()
                 .filter(om -> om.getMetricsCode().endsWith(metricSuffix) && om.getMetricsName().startsWith(agentId + "/"))
                 .forEach(om -> {
                     om.setDValue(value);
-                    updateBizObjMetrics(om);
+                    om.setUpdateTime(DateUtils.getNowDate());
+                    updateList.add(om);
+//                    updateBizObjMetrics(om);
                     BizObjMetricsData data = new BizObjMetricsData();
                     data.setObjMetricsId(om.getObjMetricsId());
                     data.setCreateTime(date);
@@ -863,7 +866,7 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
                         updateEList.add(eMap.get("update"));
                     }
                 });
-        batchUpdate(null, dataList, addRList, updateRList, addEList, updateEList);
+        batchUpdate(updateList, dataList, addRList, updateRList, addEList, updateEList);
     }
 
     private void batchUpdate
@@ -920,6 +923,7 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
     private void updateMetricsValues(Map<String, List<BizObjMetrics>> metricsMap, PinpointVO vo, Date
             date, Map<Long, AlarmRecord> recordMap, Map<Long, HlEvent> eventMap) {
         List<BizObjMetricsData> dataList = new ArrayList<>();
+        List<BizObjMetrics> updateList = new ArrayList<>();
         List<AlarmRecord> addRList = new ArrayList<>();
         List<AlarmRecord> updateRList = new ArrayList<>();
         List<HlEvent> addEList = new ArrayList<>();
@@ -929,24 +933,24 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
             list.forEach(om -> {
                 if (om.getMetricsName().startsWith(vo.getCategory() + "/")) {
                     if (vo.getTot() != 0) {
-                        updateMetric(om, "pp.1s", vo.getTime1s(), date, dataList);
-                        updateMetric(om, "pp.3s", vo.getTime3s(), date, dataList);
-                        updateMetric(om, "pp.5s", vo.getTime5s(), date, dataList);
-                        updateMetric(om, "pp.100ms", vo.getTime100ms(), date, dataList);
-                        updateMetric(om, "pp.300ms", vo.getTime300ms(), date, dataList);
-                        updateMetric(om, "pp.500ms", vo.getTime500ms(), date, dataList);
-                        updateMetric(om, "pp.tot", vo.getTot(), date, dataList);
-                        updateMetric(om, "pp.sum", vo.getSum(), date, dataList);
-                        updateMetric(om, "pp.max", vo.getMax(), date, dataList);
-                        updateMetric(om, "pp.avg", vo.getAvg(), date, dataList);
-                        updateMetric(om, "pp.slow", vo.getSlow(), date, dataList);
-                        updateMetric(om, "pp.error", vo.getError(), date, dataList);
+                        updateMetric(om, "pp.1s", vo.getTime1s(), date, dataList, updateList);
+                        updateMetric(om, "pp.3s", vo.getTime3s(), date, dataList, updateList);
+                        updateMetric(om, "pp.5s", vo.getTime5s(), date, dataList, updateList);
+                        updateMetric(om, "pp.100ms", vo.getTime100ms(), date, dataList, updateList);
+                        updateMetric(om, "pp.300ms", vo.getTime300ms(), date, dataList, updateList);
+                        updateMetric(om, "pp.500ms", vo.getTime500ms(), date, dataList, updateList);
+                        updateMetric(om, "pp.tot", vo.getTot(), date, dataList, updateList);
+                        updateMetric(om, "pp.sum", vo.getSum(), date, dataList, updateList);
+                        updateMetric(om, "pp.max", vo.getMax(), date, dataList, updateList);
+                        updateMetric(om, "pp.avg", vo.getAvg(), date, dataList, updateList);
+                        updateMetric(om, "pp.slow", vo.getSlow(), date, dataList, updateList);
+                        updateMetric(om, "pp.error", vo.getError(), date, dataList, updateList);
                         Integer time1 = vo.getTime1s();
                         if (time1 == null) {
                             time1 = vo.getTime100ms();
                         }
                         BigDecimal rate = BigDecimal.valueOf(time1).divide(BigDecimal.valueOf(vo.getTot()), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
-                        updateMetric(om, "pp.rate", rate, date, dataList);
+                        updateMetric(om, "pp.rate", rate, date, dataList, updateList);
                         if (om.getDValue() != null) {
                             //处理告警
                             Map<String, AlarmRecord> aMap = alarmRecordService.process(om, recordMap, date);
@@ -970,7 +974,7 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
                 }
             });
         }
-        batchUpdate(null, dataList, addRList, updateRList, addEList, updateEList);
+        batchUpdate(updateList, dataList, addRList, updateRList, addEList, updateEList);
 //        metricsMap.values().stream()
 //                .filter(om -> om.getMetricsCode().startsWith(vo.getApplicationName() + "/"))
 //                .forEach(om -> {
@@ -998,10 +1002,12 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
      * @param date   时间
      */
     private void updateMetric(BizObjMetrics om, String suffix, Number value, Date
-            date, List<BizObjMetricsData> dataList) {
+            date, List<BizObjMetricsData> dataList, List<BizObjMetrics> updateList) {
         if (om.getMetricsCode().endsWith(suffix) && value != null) {
             om.setDValue(BigDecimal.valueOf(value.doubleValue()));
-            updateBizObjMetrics(om);
+            om.setUpdateTime(new Date());
+            updateList.add(om);
+//            updateBizObjMetrics(om);
 
             BizObjMetricsData data = new BizObjMetricsData();
             data.setObjMetricsId(om.getObjMetricsId());