diff --git a/.idea/icon.png b/.idea/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..30c3599095ae24ae0345dc8a239e5b50a9273005
Binary files /dev/null and b/.idea/icon.png differ
diff --git a/assets/files/download_links.json b/assets/files/download_links.json
index fdf01f9082ab66cd29d6579cc203a2423799ac9b..9c564233b9c0954e218db054903276477c2e90dc 100644
--- a/assets/files/download_links.json
+++ b/assets/files/download_links.json
@@ -1,5 +1,5 @@
{
- "windows": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.1/WePush-5.0.1-windows.exe",
- "mac": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.1/WePush_5.0.1.dmg",
- "linux": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.1/WePush_5.0.1.deb"
+ "windows": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.2/WePush-5.0.2-windows.exe",
+ "mac": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.2/WePush_5.0.2.dmg",
+ "linux": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.2/WePush_5.0.2.deb"
}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 61152e4a8bd2f2389a5c42797eee7e1c2edb34f1..9b43d04aefdbe21ebc9afc18b84ce056cbbb6778 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.fangxuele.tool
WePush
- 5.0.2
+ 5.0.3
jar
WePush
@@ -15,10 +15,10 @@
UTF-8
UTF-8
- 1.8
- 1.8
+ 21
+ 21
- 1.8
+ 21
1.2.3
4.4.0
4.4.0
@@ -36,7 +36,7 @@
1.0.6
1.2.7
2.3
- 1.18.20
+ 1.18.30
3.5.13
3.42.0.1
4.13.1
@@ -47,9 +47,9 @@
1.1.0
0.10.134
7.3.0
- 3.2
- 3.2
- 3.2
+ 3.2.1
+ 3.2.1
+ 3.2.1
2.6.0
3.1.847
@@ -440,70 +440,68 @@
io.github.fvarrui
javapackager
- 1.7.2
+ 1.7.4
true
com.fangxuele.tool.push.App
true
-
- bundling-for-windows
- package
-
- package
-
-
- windows
- true
- jdk.crypto.ec,jdk.charsets
-
-
-
-
- true
- true
- true
-
-
- installForAllUsers
- true
- false
- false
-
- compiler:Default.isl
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ bundling-for-mac
+ package
+
+ package
+
+
+ mac
+ true
+ jdk.crypto.ec,jdk.charsets
+ false
+
+
diff --git a/src/main/java/com/fangxuele/tool/push/domain/TTask.java b/src/main/java/com/fangxuele/tool/push/domain/TTask.java
index 387ca83bf2900bc9ec629d0a7e70725c07babf07..6aa588940b55a5b9cbc9a7ec6795e20fbb2ea6aa 100644
--- a/src/main/java/com/fangxuele/tool/push/domain/TTask.java
+++ b/src/main/java/com/fangxuele/tool/push/domain/TTask.java
@@ -37,6 +37,10 @@ public class TTask implements Serializable {
private Integer saveResult;
+ private Integer intervalPush;
+
+ private Integer intervalTime;
+
private String remark;
private String createTime;
@@ -181,6 +185,22 @@ public class TTask implements Serializable {
this.saveResult = saveResult;
}
+ public Integer getIntervalPush() {
+ return intervalPush;
+ }
+
+ public void setIntervalPush(Integer intervalPush) {
+ this.intervalPush = intervalPush;
+ }
+
+ public Integer getIntervalTime() {
+ return intervalTime;
+ }
+
+ public void setIntervalTime(Integer intervalTime) {
+ this.intervalTime = intervalTime;
+ }
+
public String getRemark() {
return remark;
}
diff --git a/src/main/java/com/fangxuele/tool/push/logic/TaskRunThread.java b/src/main/java/com/fangxuele/tool/push/logic/TaskRunThread.java
index eaab370171815b4a4c2ad117040f090715a382ab..215f504cab9cc8dbbfd0ceca1b30fafb6d2c27ec 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/TaskRunThread.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/TaskRunThread.java
@@ -37,7 +37,7 @@ import java.io.IOException;
import java.util.List;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.LongAdder;
import java.util.stream.Collectors;
@@ -69,6 +69,11 @@ public class TaskRunThread extends Thread {
*/
public LongAdder failRecords = new LongAdder();
+ /**
+ * 处理完毕的线程数
+ */
+ public AtomicInteger finishedThreadCount = new AtomicInteger(0);
+
/**
* 停止标志
*/
@@ -177,11 +182,11 @@ public class TaskRunThread extends Thread {
ConsoleUtil.pushLog(logWriter, "推送开始……");
// 消息数据分片以及线程纷发
tMsg = msgMapper.selectByPrimaryKey(tTask.getMessageId());
- ThreadPoolExecutor threadPoolExecutor = shardingAndMsgThread(tMsg);
+ shardingAndMsgThread(tMsg);
taskRunThreadMap.put(taskHis.getId(), this);
// 时间监控
- timeMonitor(threadPoolExecutor);
+ timeMonitor();
resetLocalData();
@@ -289,9 +294,7 @@ public class TaskRunThread extends Thread {
/**
* 消息数据分片以及线程纷发
*/
- private ThreadPoolExecutor shardingAndMsgThread(TMsg tMsg) {
- int maxThreadPoolSize = tTask.getThreadCnt();
- ThreadPoolExecutor threadPoolExecutor = ThreadUtil.newExecutor(maxThreadPoolSize, maxThreadPoolSize);
+ private void shardingAndMsgThread(TMsg tMsg) {
MsgSendThread msgSendThread;
// 每个线程分配
int perThread = (int) (totalRecords / threadCount) + 1;
@@ -309,24 +312,18 @@ public class TaskRunThread extends Thread {
IMsgSender msgSender = MsgSenderFactory.getMsgSender(tMsg.getId(), dryRun);
msgSendThread = new MsgSendThread(startIndex, endIndex, msgSender, this);
- msgSendThread.setName("T-" + i);
-
- threadPoolExecutor.execute(msgSendThread);
+ Thread.ofVirtual().name("T-" + i).start(msgSendThread);
}
- threadPoolExecutor.shutdown();
ConsoleUtil.pushLog(logWriter, "所有线程宝宝启动完毕……");
- return threadPoolExecutor;
}
/**
* 时间监控
- *
- * @param threadPoolExecutor
*/
- private void timeMonitor(ThreadPoolExecutor threadPoolExecutor) {
+ private void timeMonitor() {
// 计时
while (true) {
- if (threadPoolExecutor.isTerminated()) {
+ if (finishedThreadCount.get() == threadCount) {
taskHis.setEndTime(SqliteUtil.nowDateForSqlite());
int successCount = sendSuccessList.size();
@@ -440,6 +437,7 @@ public class TaskRunThread extends Thread {
running = false;
successRecords.reset();
failRecords.reset();
+ finishedThreadCount.set(0);
threadCount = 0;
toSendList = Collections.synchronizedList(new LinkedList<>());
sendSuccessList = Collections.synchronizedList(new LinkedList<>());
diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgthread/BaseMsgThread.java b/src/main/java/com/fangxuele/tool/push/logic/msgthread/BaseMsgThread.java
index f978c4a1006d967e1757699bdd011a9933105d98..e3814145e10cd553fe0388980e559cb37f4529bb 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgthread/BaseMsgThread.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgthread/BaseMsgThread.java
@@ -15,7 +15,7 @@ import java.util.List;
* @author RememBerBer
* @since 2017/3/29.
*/
-public class BaseMsgThread extends Thread {
+public class BaseMsgThread implements Runnable {
public static final Log logger = LogFactory.get();
@@ -53,7 +53,7 @@ public class BaseMsgThread extends Thread {
* 初始化当前线程
*/
public void initCurrentThread() {
- ConsoleUtil.pushLog(taskRunThread.getLogWriter(), "线程" + this.getName() + "负责处理第:" + startIndex + "-" + endIndex + "条数据");
+ ConsoleUtil.pushLog(taskRunThread.getLogWriter(), "线程" + Thread.currentThread().getName() + "负责处理第:" + startIndex + "-" + endIndex + "条数据");
list = taskRunThread.getToSendList().subList(startIndex, endIndex);
@@ -63,7 +63,7 @@ public class BaseMsgThread extends Thread {
* 当前线程结束
*/
public void currentThreadFinish() {
- ConsoleUtil.pushLog(taskRunThread.getLogWriter(), this.getName() + "已处理完第" + startIndex + "-" + endIndex + "条的数据");
+ ConsoleUtil.pushLog(taskRunThread.getLogWriter(), Thread.currentThread().getName() + "已处理完第" + startIndex + "-" + endIndex + "条的数据");
}
}
diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgthread/MsgSendThread.java b/src/main/java/com/fangxuele/tool/push/logic/msgthread/MsgSendThread.java
index a3a274c865fb83768c36fc511b87d2cc6e034f75..fe3657774c80f38c7244e427df75a746746c1258 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgthread/MsgSendThread.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgthread/MsgSendThread.java
@@ -1,6 +1,7 @@
package com.fangxuele.tool.push.logic.msgthread;
import cn.hutool.json.JSONUtil;
+import com.fangxuele.tool.push.domain.TTask;
import com.fangxuele.tool.push.logic.MessageTypeEnum;
import com.fangxuele.tool.push.logic.TaskRunThread;
import com.fangxuele.tool.push.logic.msgsender.IMsgSender;
@@ -20,6 +21,7 @@ import org.bouncycastle.util.Arrays;
public class MsgSendThread extends BaseMsgThread {
private IMsgSender iMsgSender;
+
public MsgSendThread(int startIndex, int endIndex, IMsgSender msgSender, TaskRunThread taskRunThread) {
super(startIndex, endIndex, taskRunThread);
this.iMsgSender = msgSender;
@@ -30,6 +32,10 @@ public class MsgSendThread extends BaseMsgThread {
try {
// 初始化当前线程
initCurrentThread();
+ TTask tTask = taskRunThread.getTTask();
+
+ // 间隔推送
+ boolean isIntervalPush = tTask.getIntervalPush() != null && tTask.getIntervalPush() == 1 && tTask.getIntervalTime() != null;
for (int i = 0; i < list.size(); i++) {
if (!taskRunThread.running) {
@@ -37,11 +43,16 @@ public class MsgSendThread extends BaseMsgThread {
return;
}
+ // 间隔推送
+ if (isIntervalPush) {
+ Thread.sleep(tTask.getIntervalTime() * 1000);
+ }
+
// 本条消息所需的数据
String[] msgData = list.get(i);
SendResult sendResult = iMsgSender.send(msgData);
- if (taskRunThread.getTTask().getMsgType() == MessageTypeEnum.HTTP_CODE && taskRunThread.getTTask().getSaveResult() == 1) {
+ if (tTask.getMsgType() == MessageTypeEnum.HTTP_CODE && tTask.getSaveResult() == 1) {
String body = sendResult.getInfo() == null ? "" : sendResult.getInfo();
msgData = Arrays.append(msgData, body);
}
@@ -68,6 +79,9 @@ public class MsgSendThread extends BaseMsgThread {
currentThreadFinish();
} catch (Exception e) {
logger.error(ExceptionUtils.getStackTrace(e));
+ } finally {
+ // 线程结束,处理完毕的线程数+1
+ taskRunThread.finishedThreadCount.incrementAndGet();
}
}
diff --git a/src/main/java/com/fangxuele/tool/push/ui/Init.java b/src/main/java/com/fangxuele/tool/push/ui/Init.java
index 303a663177fba4551e0a2c805422dc94c7c53578..9dd62de44c3d61812a4c12fa2f2e090d64723ff0 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/Init.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/Init.java
@@ -222,7 +222,7 @@ public class Init {
popupMenu.setFont(App.mainFrame.getContentPane().getFont());
MenuItem openItem = new MenuItem("WePush");
- MenuItem exitItem = new MenuItem("退出");
+ MenuItem exitItem = new MenuItem("Exit");
openItem.addActionListener(e -> {
App.mainFrame.setExtendedState(JFrame.NORMAL);
diff --git a/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java b/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java
index 331537489ed48fd3ff2b7a96ef933654d9febd46..88b060ba8b3a624ad86a4e29ab02976088dc7525 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java
@@ -19,7 +19,7 @@ public class UiConsts {
* 软件名称,版本
*/
public final static String APP_NAME = "WePush";
- public final static String APP_VERSION = "v_5.0.2";
+ public final static String APP_VERSION = "v_5.0.3";
public static final int TABLE_ROW_HEIGHT = 30;
diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/InfinityTaskHisDetailDialog.java b/src/main/java/com/fangxuele/tool/push/ui/dialog/InfinityTaskHisDetailDialog.java
index b622d512e8fc30a2be38eac34ce4891dd5c8a1d4..621bba89027afb1d389337ec2907adedc56ba0cf 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/dialog/InfinityTaskHisDetailDialog.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/InfinityTaskHisDetailDialog.java
@@ -82,7 +82,7 @@ public class InfinityTaskHisDetailDialog extends JDialog {
public InfinityTaskHisDetailDialog() {
super(App.mainFrame, "执行详情");
- ComponentUtil.setPreferSizeAndLocateToCenter(this, 0.5, 0.64);
+ ComponentUtil.setPreferSizeAndLocateToCenter(this, 0.68, 0.64);
setContentPane(contentPane);
setModal(true);
diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.form b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.form
index 26b321b1e27c41142cf7c60bd0af01174cd31159..91929d033d366af3ef18c544e1a9de6166971828 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.form
+++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.form
@@ -1,7 +1,7 @@