diff --git a/blibli-backend-framework-job/pom.xml b/blibli-backend-framework-job/pom.xml
new file mode 100644
index 0000000..f86430d
--- /dev/null
+++ b/blibli-backend-framework-job/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ blibli-backend-framework
+ com.blibli.oss
+ 0.0.6-SNAPSHOT
+
+ 4.0.0
+
+ blibli-backend-framework-job
+
+
+
+ io.projectreactor
+ reactor-test
+ test
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ com.blibli.oss
+ blibli-backend-framework-reactor
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+
+
+
+
\ No newline at end of file
diff --git a/blibli-backend-framework-job/src/main/java/com/blibli/oss/backend/job/Job.java b/blibli-backend-framework-job/src/main/java/com/blibli/oss/backend/job/Job.java
new file mode 100644
index 0000000..bfae4d5
--- /dev/null
+++ b/blibli-backend-framework-job/src/main/java/com/blibli/oss/backend/job/Job.java
@@ -0,0 +1,9 @@
+package com.blibli.oss.backend.job;
+
+import reactor.core.publisher.Mono;
+
+public interface Job {
+
+ Mono execute(T request);
+
+}
diff --git a/blibli-backend-framework-job/src/main/java/com/blibli/oss/backend/job/JobManager.java b/blibli-backend-framework-job/src/main/java/com/blibli/oss/backend/job/JobManager.java
new file mode 100644
index 0000000..b4b28b8
--- /dev/null
+++ b/blibli-backend-framework-job/src/main/java/com/blibli/oss/backend/job/JobManager.java
@@ -0,0 +1,9 @@
+package com.blibli.oss.backend.job;
+
+import reactor.core.publisher.Mono;
+
+public interface JobManager {
+
+ Mono execute(String command);
+
+}
diff --git a/blibli-backend-framework-job/src/test/java/com/blibli/oss/backend/job/JobTest.java b/blibli-backend-framework-job/src/test/java/com/blibli/oss/backend/job/JobTest.java
new file mode 100644
index 0000000..d6c39f8
--- /dev/null
+++ b/blibli-backend-framework-job/src/test/java/com/blibli/oss/backend/job/JobTest.java
@@ -0,0 +1,57 @@
+package com.blibli.oss.backend.job;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.cli.*;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@Slf4j
+class JobTest {
+
+ private ObjectMapper objectMapper;
+
+ @BeforeEach
+ void setUp() {
+ objectMapper = new ObjectMapper();
+ }
+
+ @Test
+ void testFirst() {
+ String[] arguments = "reindex --start=100 --from=200".split("\\s+");
+
+ String command = arguments[0];
+ Map map = new HashMap<>();
+
+ for (int i = 1; i < arguments.length; i++) {
+ String[] split = arguments[i].split("=");
+ if (split.length == 2 && split[0].startsWith("--")) {
+ map.put(split[0].substring(2), split[1]);
+ }
+ }
+
+ Request request = objectMapper.convertValue(map, Request.class);
+ log.info(request.toString());
+ }
+
+ @Data
+ @Builder
+ @AllArgsConstructor
+ @NoArgsConstructor
+ public static class Request {
+
+ private Integer start;
+
+ private Integer from;
+
+ }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 830daa3..6f58208 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,6 +18,7 @@
blibli-backend-framework-validation
blibli-backend-framework-sleuth
blibli-backend-framework-external-api
+ blibli-backend-framework-job
@@ -114,6 +115,11 @@
blibli-backend-framework-version
${blibli-framework.version}
+
+ com.blibli.oss
+ blibli-backend-framework-job
+ ${blibli-framework.version}
+
com.blibli.oss
blibli-backend-framework-json