add task module

This commit is contained in:
zhou-hao
2018-08-19 22:58:38 +08:00
parent 7bc7090e29
commit aaf36b1773
16 changed files with 292 additions and 0 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

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

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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
hsweb-task/pom.xml Normal file
View File

@@ -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>

View File

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