diff --git a/pom.xml b/pom.xml
index 561984c..1b68cc3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,7 +38,22 @@
com.aizuda
easy-retry-client-starter
- 2.3.0-SNAPSHOT
+ 2.4.0-SNAPSHOT
+
+
+ com.aizuda
+ easy-retry-client-core
+ 2.4.0-SNAPSHOT
+
+
+ com.aizuda
+ easy-retry-client-job-core
+ 2.4.0-SNAPSHOT
+
+
+ org.freemarker
+ freemarker
+ 2.3.28
com.googlecode.aviator
diff --git a/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutor.java b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutor.java
new file mode 100644
index 0000000..1309ea3
--- /dev/null
+++ b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutor.java
@@ -0,0 +1,22 @@
+package com.example.easy.retry.job;
+
+import com.aizuda.easy.retry.client.job.core.annotation.JobExecutor;
+import com.aizuda.easy.retry.client.job.core.dto.JobArgs;
+import com.aizuda.easy.retry.client.job.core.dto.JobContext;
+import com.aizuda.easy.retry.client.model.ExecuteResult;
+import com.aizuda.easy.retry.common.core.util.JsonUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author www.byteblogs.com
+ * @date 2023-09-28 22:54:07
+ * @since 2.4.0
+ */
+@Component
+@JobExecutor(name = "testJobExecutor")
+public class TestAnnoJobExecutor {
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ return ExecuteResult.success("测试成功");
+ }
+}
diff --git a/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep10s.java b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep10s.java
new file mode 100644
index 0000000..5e7a327
--- /dev/null
+++ b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep10s.java
@@ -0,0 +1,27 @@
+package com.example.easy.retry.job;
+
+import com.aizuda.easy.retry.client.job.core.annotation.JobExecutor;
+import com.aizuda.easy.retry.client.job.core.dto.JobArgs;
+import com.aizuda.easy.retry.client.model.ExecuteResult;
+import com.aizuda.easy.retry.common.core.util.JsonUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author www.byteblogs.com
+ * @date 2023-09-28 22:54:07
+ * @since 2.4.0
+ */
+@Component
+@JobExecutor(name = "testAnnoJobExecutorSleep10s")
+public class TestAnnoJobExecutorSleep10s {
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ System.out.println(JsonUtil.toJsonString(jobArgs));
+ try {
+ Thread.sleep(10 * 1000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ return ExecuteResult.success("测试成功");
+ }
+}
diff --git a/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep1s.java b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep1s.java
new file mode 100644
index 0000000..00e0de9
--- /dev/null
+++ b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep1s.java
@@ -0,0 +1,27 @@
+package com.example.easy.retry.job;
+
+import com.aizuda.easy.retry.client.job.core.annotation.JobExecutor;
+import com.aizuda.easy.retry.client.job.core.dto.JobArgs;
+import com.aizuda.easy.retry.client.model.ExecuteResult;
+import com.aizuda.easy.retry.common.core.util.JsonUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author www.byteblogs.com
+ * @date 2023-09-28 22:54:07
+ * @since 2.4.0
+ */
+@Component
+@JobExecutor(name = "testAnnoJobExecutorSleep1s")
+public class TestAnnoJobExecutorSleep1s {
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ System.out.println(JsonUtil.toJsonString(jobArgs));
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ return ExecuteResult.success("测试成功");
+ }
+}
diff --git a/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep30s.java b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep30s.java
new file mode 100644
index 0000000..14f3591
--- /dev/null
+++ b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep30s.java
@@ -0,0 +1,27 @@
+package com.example.easy.retry.job;
+
+import com.aizuda.easy.retry.client.job.core.annotation.JobExecutor;
+import com.aizuda.easy.retry.client.job.core.dto.JobArgs;
+import com.aizuda.easy.retry.client.model.ExecuteResult;
+import com.aizuda.easy.retry.common.core.util.JsonUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author www.byteblogs.com
+ * @date 2023-09-28 22:54:07
+ * @since 2.4.0
+ */
+@Component
+@JobExecutor(name = "testAnnoJobExecutorSleep30s")
+public class TestAnnoJobExecutorSleep30s {
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ System.out.println(JsonUtil.toJsonString(jobArgs));
+ try {
+ Thread.sleep(30 * 1000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ return ExecuteResult.success("测试成功");
+ }
+}
diff --git a/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep5s.java b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep5s.java
new file mode 100644
index 0000000..46fea0f
--- /dev/null
+++ b/src/main/java/com/example/easy/retry/job/TestAnnoJobExecutorSleep5s.java
@@ -0,0 +1,27 @@
+package com.example.easy.retry.job;
+
+import com.aizuda.easy.retry.client.job.core.annotation.JobExecutor;
+import com.aizuda.easy.retry.client.job.core.dto.JobArgs;
+import com.aizuda.easy.retry.client.model.ExecuteResult;
+import com.aizuda.easy.retry.common.core.util.JsonUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author www.byteblogs.com
+ * @date 2023-09-28 22:54:07
+ * @since 2.4.0
+ */
+@Component
+@JobExecutor(name = "testAnnoJobExecutorSleep5s")
+public class TestAnnoJobExecutorSleep5s {
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ System.out.println(JsonUtil.toJsonString(jobArgs));
+ try {
+ Thread.sleep(5 * 1000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ return ExecuteResult.success("测试成功");
+ }
+}
diff --git a/src/main/java/com/example/easy/retry/job/TestClassJobExecutor.java b/src/main/java/com/example/easy/retry/job/TestClassJobExecutor.java
new file mode 100644
index 0000000..4029b73
--- /dev/null
+++ b/src/main/java/com/example/easy/retry/job/TestClassJobExecutor.java
@@ -0,0 +1,20 @@
+package com.example.easy.retry.job;
+
+import com.aizuda.easy.retry.client.job.core.dto.JobArgs;
+import com.aizuda.easy.retry.client.job.core.executor.AbstractJobExecutor;
+import com.aizuda.easy.retry.client.model.ExecuteResult;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author www.byteblogs.com
+ * @date 2023-09-28 22:54:07
+ * @since 2.4.0
+ */
+@Component
+public class TestClassJobExecutor extends AbstractJobExecutor {
+
+ @Override
+ protected ExecuteResult doJobExecute(JobArgs jobArgs) {
+ return ExecuteResult.success("TestJobExecutor测试成功");
+ }
+}