From dbb4ac17ff70578662af99c6b1772b5c0641d005 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 20 十一月 2024 18:48:23 +0800
Subject: [PATCH] 1、基于Timer实现定时执行的任务,并在满足条件下结束定时任务,为此实现抽象类TimerTaskJob类,并在UpgradeManager类中应用; 2、TreadJob类由TimerTaskJob替换,弃用TreadJob类。
---
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/TimerTaskJob.java | 62 ++++++++++++
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/TimerTaskJobTest.java | 48 +++++++++
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java | 177 ++++++++++++++++-------------------
3 files changed, 190 insertions(+), 97 deletions(-)
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/TimerTaskJob.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/TimerTaskJob.java
new file mode 100644
index 0000000..b72f479
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/TimerTaskJob.java
@@ -0,0 +1,62 @@
+package com.dy.common.util;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/20 17:49
+ * @Description :
+ * 姝ゆ娊璞$被浠f浛ThreadJob锛屽師鍥狅細
+ * 鍦╳hile(true){}涓娇鐢═hread.sleep()锛屽彲鑳藉鑷寸殑涓ラ噸鎬ц兘闂锛屼笉鎺ㄨ崘鍦ㄥ惊鐜腑浣跨敤绾跨▼浼戠湢銆�
+ * Java绾跨▼瀹炵幇閲囩敤鍐呮牳绾跨▼瀹炵幇锛岀嚎绋嬬殑浼戠湢鍙婂敜閱掞紙鐘舵�佸垏鎹級闇�鍊熷姪鎿嶄綔绯荤粺杩涜锛岃繖鏄竴涓瀬鍏惰�楁椂鑰楀姏鐨勬搷浣溿��
+ * 鍦ㄧ嚎绋嬩紤鐪犳垨杩愯鏃堕棿杈冮暱鐨勬儏鏅笅锛屽叾瀵规�ц兘鐨勫奖鍝嶈繕涓嶇畻鏄庢樉锛屽洜涓哄绾跨▼鐘舵�佺殑鍒囨崲骞朵笉棰戠箒銆�
+ * 浣嗚嫢绾跨▼浼戠湢鍙婅繍琛岀殑鏃堕棿閮藉緢鐭紙渚嬪姣/绉掞紝鏂囦腑妗堜緥灏辨槸涓�涓吀鍨嬫渚嬶級锛�
+ * 绯荤粺灏嗛绻佺殑瀵圭嚎绋嬬姸鎬佽繘琛屽垏鎹紝瀵艰嚧涓ラ噸鐨勬�ц兘鎹熻�楋紝骞跺鐫�寰幆娆℃暟鐨勯�掑鑰屾斁澶с��
+ */
+public abstract class TimerTaskJob {
+ protected Timer timer;
+
+ protected boolean stop = false ;
+ public void stop(){
+ this.stop = true ;
+ if(this.timer != null){
+ this.timer.cancel();
+ }
+ }
+ public boolean isStop(){
+ return this.stop ;
+ }
+
+ /**
+ *
+ * @param delay
+ * @param interval
+ * @param callback
+ * @throws Exception
+ */
+ public void start(Long delay, Long interval, Callback callback) throws Exception {
+ this.timer = new Timer();
+ this.timer.schedule(new TimerTask() {
+ public void run() {
+ Exception exe = null ;
+ Object obj = null ;
+ try {
+ obj = execute() ;
+ }catch(Exception e){
+ e.printStackTrace();
+ exe = e ;
+ }finally {
+ if(callback != null){
+ if(exe != null){
+ callback.exception(exe);
+ }else{
+ callback.call(obj);
+ }
+ }
+ }
+ }
+ }, delay , interval);
+ }
+ public abstract Object execute() throws Exception ;
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/TimerTaskJobTest.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/TimerTaskJobTest.java
new file mode 100644
index 0000000..d87c8bc
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/TimerTaskJobTest.java
@@ -0,0 +1,48 @@
+package com.dy.common.util;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/11/20 18:29
+ * @Description
+ */
+public class TimerTaskJobTest extends TimerTaskJob implements Callback {
+
+ private static int count = 0 ;
+
+ public static void main(String[] args) throws Exception {
+ TimerTaskJobTest obj = new TimerTaskJobTest() ;
+ obj.start(1000L, 1000L, obj);
+ }
+
+ public Object execute() {
+ count++ ;
+ System.out.println("鎵ц浼烘湇绾跨▼" + count + "娆�");
+ if(count == 10) {
+ stop() ;
+ }
+ return true ;
+ }
+
+ ////////////////////////////////////////////////////
+ //
+ // 鍗囩骇鐘舵�侀�氱煡宸ヤ綔绾跨▼鎵ц瀹屾垚鍚庡洖璋冪殑鏂规硶锛�
+ // 涔熷氨鏄笂闈xecute鏂规硶鎵ц瀹屾垚杩斿洖鎴栨姏鍑哄紓甯稿悗锛屾墽琛屼笅闈笁涓柟娉�
+ //
+ ////////////////////////////////////////////////////
+ @Override
+ public void call(Object obj) {
+ //绾跨▼宸ヤ綔鎵ц涓�娆★紝obj = Boolean(true)
+ System.out.println("浼烘湇绾跨▼鎵ц涓�娆″洖璋�");
+ }
+ @Override
+ public void call(Object... objs) {
+ }
+ @Override
+ public void exception(Exception e) {
+ e.printStackTrace();
+ System.out.println("浼烘湇绾跨▼鍙戠敓寮傚父" + e.getMessage());
+ }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
index c2e0801..af7d7fa 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
@@ -7,19 +7,19 @@
import com.dy.common.springUtil.SpringContextUtil;
import com.dy.common.util.Callback;
import com.dy.common.util.DateTime;
-import com.dy.common.util.ThreadJob;
+import com.dy.common.util.TimerTaskJob;
import com.dy.rtuMw.web.webRequest.WebRequestDeal;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-
import java.util.List;
/**
- * @Author: liurunyu
- * @Date: 2024/11/4 16:03
+ * 鍗囩骇绠$悊绫�
+ * @Author liurunyu
+ * @Date 2024/11/4 16:03
* @Description
*/
-public class UpgradeManager extends ThreadJob implements Callback {
+public class UpgradeManager extends TimerTaskJob implements Callback {
private static final Logger log = LogManager.getLogger(UpgradeManager.class.getName());
@@ -29,8 +29,11 @@
private Integer ugMaxRtuSameTime ;//鍚屾椂鍗囩骇RTU鏈�澶т釜鏁�
private UpgradeTask task ;//鍗囩骇浠诲姟
+ private boolean monitorFirst = true ;//鏄惁鏄涓�娆$洃瑙�
- private UpgradeManager(){}
+ private UpgradeManager(){
+ monitorFirst = true ;
+ }
public static UpgradeManager getInstance() {
return UpgradeManager.INSTANCE;
@@ -47,7 +50,7 @@
/**
* 璁剧疆鍗囩骇浠诲姟
* @param vo UpgradeTaskVo 鍗囩骇浠诲姟瀵硅薄
- * @throws Exception
+ * @throws Exception 寮傚父
*/
public void setUpgradeTask(UpgradeTaskVo vo) throws Exception {
if(this.task != null && !this.task.taskIsOver){
@@ -68,7 +71,7 @@
this.task = null ;
throw ex ;
}else{
- this.start(this);
+ this.start(1000L, (long) UpgradeUnit.confVo.notifyStateInterval, this);
}
}
}
@@ -79,9 +82,8 @@
* 姝ゅ姛鑳藉彲鑳戒笉浼氬紑鏀惧嚭鍘伙紝
* 鍥犱负寮哄埗缁撴潫鍗囩骇浠诲姟锛屽涓�涓湭鍗囩骇瀹屾垚鐨凴TU灏变細鍗℃锛�
* 鎵�浠ュ綋寮哄埗缁撴潫鍗囩骇浠诲姟锛屼唬鐮侀�昏緫骞舵病鏈夊己鍒剁粨鏋淩TU鍗囩骇杩囩▼锛屽鏋滃崌绾ц繃绋嬩篃寮哄埗鍋滄锛岄偅涔圧TU鐪熶細鍗℃
- * @throws Exception
*/
- public void forceOverUpgradeTask() throws Exception {
+ public void forceOverUpgradeTask() {
if(this.task != null){
this.stop();
this.task.forceOver();
@@ -91,11 +93,11 @@
/**
* RTU鏈変笂琛屾暟鎹簡锛岃Е鍙戜笅鍙戝崌绾ф暟鎹�
- * @param rtuAddr
- * @param code
- * @param protocolName
- * @param protocolVersion
- * @param callbackCom
+ * @param rtuAddr 鎺у埗鍣≧TU鍦板潃
+ * @param code 涓婅鏁版嵁鍔熻兘鐮�
+ * @param protocolName 涓婅鏁版嵁瀵瑰簲鐨勫崗璁悕绉�
+ * @param protocolVersion 涓婅鏁版嵁瀵瑰簲鐨勫崗璁増鏈彿
+ * @param callbackCom 鍥炶皟鍑芥暟锛屽鐞嗕笅琛屽懡浠�
*/
public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callbackCom){
if(task != null && !task.taskIsOver){
@@ -110,7 +112,7 @@
////////////////////////////////////////////////////
/**
* 褰撳墠鍗囩骇鐘舵��
- * @return
+ * @return 褰撳墠鍗囩骇鐘舵��
*/
public UpgradeState currentUpgradeState() {
if(task != null){
@@ -122,9 +124,10 @@
/**
* Rtu鍗囩骇淇℃伅
- * @param rtuAddr
- * @return
+ * @param rtuAddr 鎺у埗鍣≧TU鍦板潃
+ * @return 鎺у埗鍣≧TU鍗囩骇鐘舵��
*/
+ @SuppressWarnings("unused")
public UpgradeRtu upgradeRtuInfo(String rtuAddr){
if(task != null){
return task.upgradeInfos(rtuAddr) ;
@@ -135,9 +138,10 @@
/**
* Rtu鍗囩骇淇℃伅
- * @param rtuAddrList
- * @return
+ * @param rtuAddrList 鎺у埗鍣ㄥ湴鍧�鍒楄〃
+ * @return 鎸囧畾鍒楄〃涓殑鎺у埗鍣≧TU鍗囩骇鐘舵��
*/
+ @SuppressWarnings("unused")
public List<UpgradeRtu> upgradeRtuInfos(List<String> rtuAddrList){
if(task != null){
return task.upgradeInfos(rtuAddrList) ;
@@ -148,8 +152,8 @@
/**
- * Rtu鍗囩骇淇℃伅
- * @return
+ * 鎵�鏈塕tu鍗囩骇淇℃伅
+ * @return 鎵�鏈塕tu鍗囩骇淇℃伅
*/
public List<UpgradeRtu> upgradeRtuInfoAll(){
if(task != null){
@@ -166,84 +170,64 @@
// 缁熻鐘舵�� + 鐘舵�侀�氱煡
//
////////////////////////////////////////////////////
- @Override
- public Object execute() throws Exception {
- boolean first = true ;
- while (true){
- if(this.isStop()){
- break ;
- }
- if(first){
- try{
- //棣栨鍚姩锛屽仠1绉�
- Thread.sleep(1000L);
- }catch (Exception e){
- }
- }else{
- try{
- //鍋淴姣
- Thread.sleep(UpgradeUnit.confVo.notifyStateInterval);
- }catch (Exception e){
- }
- }
- if(this.task == null
- || this.task.taskVo == null
- || this.task.taskVo.rtuAddrList == null
- || this.task.taskVo.rtuAddrList.size() == 0){
- //浠诲姟涓虹┖
- break ;
- }else{
- if(!this.task.taskIsOver){
- //鍗囩骇浠诲姟鏈畬鎴�
- //宸ヤ綔1锛氬垽鏂槸鍚︽棤浠讳綍涓�涓猂TU杩涜杩囧崌绾э紝骞朵笖杈惧埌鏃堕檺锛屽垯璁や负褰撳墠鍗囩骇浠诲姟瀹屾垚
- //-1:鏃犱竴RTU鍗囩骇涓旇秴鏃讹紝0锛氭棤RTU鍗囩骇浣嗘湭瓒呮椂绛夊緟锛�1鏈塕TU鍗囩骇姝e父鎵ц
- int temp = this.task.countNoOneRtuUpgradeInDuration() ;
- if(temp == -1){
- this.task.taskIsOver = true ;
- //浠诲姟宸茬粡瀹屾垚
- this.stop();
- }else if(temp == 1){
- //宸ヤ綔2锛氱粺璁″綋鍓嶆鍦ㄥ崌绾х殑RTU鏁伴噺锛屼负鍚屾椂鍗囩骇鏁伴噺闄愬埗鍋氬噯澶�
- this.task.countRunningRtuCount() ;
-
- //宸ヤ綔3锛氱粺璁¢渶瑕佸崌绾т絾褰撳墠绂荤嚎RTU鐨勬儏鍐碉紝瓒呰繃鏃堕檺鐨勮澶囦负鍗囩骇瀹屾垚
- this.task.countOffRtuAndSetIfOver() ;
-
- //宸ヤ綔4锛氱粺璁℃槸鍚﹀叏閮ㄥ崌绾у畬鎴�
- this.task.taskIsOver = this.task.countIsAllOver() ;
- }else if(temp == 0){
- //涓嶄綔涓�
- }
- if(this.task.taskIsOver){
- if(!this.task.taskOverType.equals(UpgradeTask.TaskOverType_Force)){
- //浠诲姟涓嶆槸寮哄埗缁撴潫鐨�
- this.task.taskOverType = UpgradeTask.TaskOverType_Natural ;//浠诲姟瀹屾垚鏂瑰紡锛堣嚜鐒讹紝寮哄埗锛�
- this.task.taskOverDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;//浠诲姟瀹屾垚鏃堕棿(yyyy-mm-dd HH:MM:SS)
- }
- //浠诲姟瀹屾垚锛屾墽琛屾渶鍚庝竴娆″崌绾х姸鎬侀�氱煡
- //宸ヤ綔5锛氬崌绾х姸鎬侀�氱煡
- //if(!first){
- // this.notifyUpgradeStatus() ;
- //}
- }else{
- //浠诲姟鏈畬鎴愶紝缁х画鎵ц鍗囩骇鐘舵�侀�氱煡
- //宸ヤ綔5锛� 鍗囩骇鐘舵�侀�氱煡
- //if(!first){
- // this.notifyUpgradeStatus() ;
- //}
- }
- //宸ヤ綔5锛氬崌绾х姸鎬侀�氱煡
- if(!first){
- this.notifyUpgradeStatus() ;
- }
- }else{
+ public Object execute() {
+ if(this.task == null
+ || this.task.taskVo == null
+ || this.task.taskVo.rtuAddrList == null
+ || this.task.taskVo.rtuAddrList.size() == 0){
+ //浠诲姟涓虹┖
+ this.stop() ;
+ }else{
+ if(!this.task.taskIsOver){
+ //鍗囩骇浠诲姟鏈畬鎴�
+ //宸ヤ綔1锛氬垽鏂槸鍚︽棤浠讳綍涓�涓猂TU杩涜杩囧崌绾э紝骞朵笖杈惧埌鏃堕檺锛屽垯璁や负褰撳墠鍗囩骇浠诲姟瀹屾垚
+ //-1:鏃犱竴RTU鍗囩骇涓旇秴鏃讹紝0锛氭棤RTU鍗囩骇浣嗘湭瓒呮椂绛夊緟锛�1鏈塕TU鍗囩骇姝e父鎵ц
+ int temp = this.task.countNoOneRtuUpgradeInDuration() ;
+ if(temp == -1){
+ this.task.taskIsOver = true ;
//浠诲姟宸茬粡瀹屾垚
this.stop();
+ }else if(temp == 1){
+ //宸ヤ綔2锛氱粺璁″綋鍓嶆鍦ㄥ崌绾х殑RTU鏁伴噺锛屼负鍚屾椂鍗囩骇鏁伴噺闄愬埗鍋氬噯澶�
+ this.task.countRunningRtuCount() ;
+
+ //宸ヤ綔3锛氱粺璁¢渶瑕佸崌绾т絾褰撳墠绂荤嚎RTU鐨勬儏鍐碉紝瓒呰繃鏃堕檺鐨勮澶囦负鍗囩骇瀹屾垚
+ this.task.countOffRtuAndSetIfOver() ;
+
+ //宸ヤ綔4锛氱粺璁℃槸鍚﹀叏閮ㄥ崌绾у畬鎴�
+ this.task.taskIsOver = this.task.countIsAllOver() ;
+ }else if(temp == 0){
+ //涓嶄綔涓�
}
+ if(this.task.taskIsOver){
+ if(!this.task.taskOverType.equals(UpgradeTask.TaskOverType_Force)){
+ //浠诲姟涓嶆槸寮哄埗缁撴潫鐨�
+ this.task.taskOverType = UpgradeTask.TaskOverType_Natural ;//浠诲姟瀹屾垚鏂瑰紡锛堣嚜鐒讹紝寮哄埗锛�
+ this.task.taskOverDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;//浠诲姟瀹屾垚鏃堕棿(yyyy-mm-dd HH:MM:SS)
+ }
+ //浠诲姟瀹屾垚锛屾墽琛屾渶鍚庝竴娆″崌绾х姸鎬侀�氱煡
+ //宸ヤ綔5锛氬崌绾х姸鎬侀�氱煡
+ //if(!first){
+ // this.notifyUpgradeStatus() ;
+ //}
+ }else{
+ //浠诲姟鏈畬鎴愶紝缁х画鎵ц鍗囩骇鐘舵�侀�氱煡
+ //宸ヤ綔5锛� 鍗囩骇鐘舵�侀�氱煡
+ //if(!first){
+ // this.notifyUpgradeStatus() ;
+ //}
+ }
+ //宸ヤ綔5锛氬崌绾х姸鎬侀�氱煡
+ if(!this.monitorFirst){
+ this.notifyUpgradeStatus() ;
+ }
+ }else{
+ //浠诲姟宸茬粡瀹屾垚
+ this.stop();
}
- if(first){
- first = false ;
- }
+ }
+ if(this.monitorFirst){
+ this.monitorFirst = false ;
}
return true ;
}
@@ -271,7 +255,6 @@
@Override
public void call(Object obj) {
//绾跨▼宸ヤ綔鎵ц瀹屼簡锛宱bj = Boolean(true)
- this.thread = null ;//璧嬪�间负null锛屼娇绾跨▼瀵硅薄琚瀮鍦惧洖鏀跺櫒鍥炴敹
}
@Override
public void call(Object... objs) {
--
Gitblit v1.8.0