فهرست منبع

add task module

zhou-hao 6 سال پیش
والد
کامیت
aaf36b1773

+ 15 - 0
hsweb-task/hsweb-task-cluster/pom.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>hsweb-task</artifactId>
+        <groupId>org.hswebframework.web</groupId>
+        <version>3.0.0-RC-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>hsweb-task-cluster</artifactId>
+
+
+</project>

+ 15 - 0
hsweb-task/hsweb-task-core/pom.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>hsweb-task</artifactId>
+        <groupId>org.hswebframework.web</groupId>
+        <version>3.0.0-RC-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>hsweb-task-core</artifactId>
+
+
+</project>

+ 28 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/JobDetail.java

@@ -0,0 +1,28 @@
+package org.hswebframework.web.task;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class JobDetail {
+
+    private String id;
+
+    private String name;
+
+    private String description;
+
+    private String type;
+
+    private long executeTimeOut;
+
+    private long retryTimes;
+
+    private long retryInterval;
+
+    private boolean parallel;
+
+    private String content;
+
+}

+ 18 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/JobRepository.java

@@ -0,0 +1,18 @@
+package org.hswebframework.web.task;
+
+public interface JobRepository {
+
+
+    JobDetail findById(String id);
+
+    JobDetail save(JobDetail detail);
+
+    JobDetail update(JobDetail detail);
+
+    JobDetail delete(JobDetail detail);
+
+    void enable(String id);
+
+    void disable(String id);
+
+}

+ 54 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/Task.java

@@ -0,0 +1,54 @@
+package org.hswebframework.web.task;
+
+import lombok.SneakyThrows;
+import org.hswebframework.web.task.enums.TaskExecuteStatus;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
+
+public interface Task {
+
+    String getId();
+
+    String getJobId();
+
+    JobDetail getJob();
+
+    long getLastExecuteTime();
+
+    long getCreateTime();
+
+    TaskExecuteStatus getStatus();
+
+    String getCreator();
+
+    String getSubmitor();
+
+    long getTimeout();
+
+    @SneakyThrows
+    default TaskOperationResult execute() {
+        CountDownLatch latch = new CountDownLatch(1);
+        AtomicReference<TaskOperationResult> reference = new AtomicReference<>();
+        execute(result -> {
+            reference.set(result);
+            latch.countDown();
+        });
+        latch.await(getTimeout(), TimeUnit.MILLISECONDS);
+        return reference.get();
+
+    }
+
+    void execute(Consumer<TaskOperationResult> onExecute);
+
+    void cancel(Consumer<TaskOperationResult> onExecute);
+
+    void suspend(Consumer<TaskOperationResult> onExecute);
+
+    void interrupt(Consumer<TaskOperationResult> onExecute);
+
+    void start(Consumer<TaskOperationResult> onExecute);
+
+}

+ 16 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/TaskExecutor.java

@@ -0,0 +1,16 @@
+package org.hswebframework.web.task;
+
+import java.util.List;
+
+public interface TaskExecutor {
+
+    List<Task> findAll();
+
+    long total();
+
+    Task createTask(String jobId);
+
+    Task createTask(JobDetail jobDetail);
+
+
+}

+ 21 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/TaskOperationResult.java

@@ -0,0 +1,21 @@
+package org.hswebframework.web.task;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.hswebframework.web.task.enums.TaskExecuteStatus;
+
+@Getter
+@Setter
+public class TaskOperationResult {
+    private String taskId;
+
+    private String jobId;
+
+    private TaskExecuteStatus status;
+
+    private boolean success;
+
+    private Throwable cause;
+
+
+}

+ 10 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/enums/TaskExecuteStatus.java

@@ -0,0 +1,10 @@
+package org.hswebframework.web.task.enums;
+
+public enum TaskExecuteStatus {
+    success,
+    failed,
+    running,
+    suspend,
+    interrupt,
+    starting;
+}

+ 12 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/events/TaskCreatedEvent.java

@@ -0,0 +1,12 @@
+package org.hswebframework.web.task.events;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.hswebframework.web.task.Task;
+
+@AllArgsConstructor
+@Getter
+public class TaskCreatedEvent {
+    private Task task;
+
+}

+ 14 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/events/TaskExecuteAfterEvent.java

@@ -0,0 +1,14 @@
+package org.hswebframework.web.task.events;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.hswebframework.web.task.Task;
+
+@AllArgsConstructor
+@Getter
+public class TaskExecuteAfterEvent {
+    private Task task;
+
+    private String executionId;
+
+}

+ 14 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/events/TaskExecuteBeforeEvent.java

@@ -0,0 +1,14 @@
+package org.hswebframework.web.task.events;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.hswebframework.web.task.Task;
+
+@AllArgsConstructor
+@Getter
+public class TaskExecuteBeforeEvent {
+    private Task task;
+
+    private String executionId;
+
+}

+ 14 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/events/TaskFailedEvent.java

@@ -0,0 +1,14 @@
+package org.hswebframework.web.task.events;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.hswebframework.web.task.Task;
+
+@AllArgsConstructor
+@Getter
+public class TaskFailedEvent {
+    private Task task;
+
+    protected Throwable cause;
+
+}

+ 17 - 0
hsweb-task/hsweb-task-core/src/main/java/org/hswebframework/web/task/events/TaskStatusChangedEvent.java

@@ -0,0 +1,17 @@
+package org.hswebframework.web.task.events;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.hswebframework.web.task.Task;
+import org.hswebframework.web.task.enums.TaskExecuteStatus;
+
+@AllArgsConstructor
+@Getter
+public class TaskStatusChangedEvent {
+
+    private TaskExecuteStatus before;
+
+    private TaskExecuteStatus after;
+
+    private Task task;
+}

+ 22 - 0
hsweb-task/hsweb-task-local/pom.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>hsweb-task</artifactId>
+        <groupId>org.hswebframework.web</groupId>
+        <version>3.0.0-RC-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>hsweb-task-local</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.hswebframework.web</groupId>
+            <artifactId>hsweb-task-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>

+ 21 - 0
hsweb-task/pom.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>hsweb-framework</artifactId>
+        <groupId>org.hswebframework.web</groupId>
+        <version>3.0.0-RC-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>hsweb-task</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>hsweb-task-core</module>
+        <module>hsweb-task-cluster</module>
+        <module>hsweb-task-local</module>
+    </modules>
+
+
+</project>

+ 1 - 0
pom.xml

@@ -39,6 +39,7 @@
         <module>hsweb-examples</module>
         <module>hsweb-boost</module>
         <module>hsweb-thirdparty</module>
+        <module>hsweb-task</module>
     </modules>
 
     <packaging>pom</packaging>