diff --git a/config-layers/common/io/vertx/ext/mongo/MongoClientInstance.properties b/config-layers/common/io/vertx/ext/mongo/MongoClientInstance.properties
new file mode 100644
index 0000000..8897e14
--- /dev/null
+++ b/config-layers/common/io/vertx/ext/mongo/MongoClientInstance.properties
@@ -0,0 +1,6 @@
+#/io/vertx/ext/mongo/MongoClientInstance
+$class=io.vertx.reactivex.ext.mongo.MongoClientInstance
+
+vertx^=/io/vertx/core/VertxInstance.vertx
+config=mongoConfig.json
+enable=false
diff --git a/config-layers/common/io/vertx/ext/mongo/mongoConfig.json b/config-layers/common/io/vertx/ext/mongo/mongoConfig.json
new file mode 100644
index 0000000..e69de29
diff --git a/pom.xml b/pom.xml
index 3ace308..b7532cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,6 +65,11 @@
vertx-auth-oauth2
3.5.0
+
+ io.vertx
+ vertx-mongo-client
+ 3.5.0
+
UTF-8
diff --git a/src/main/java/in/erail/schedular/SchedulerService.java b/src/main/java/in/erail/schedular/SchedulerService.java
new file mode 100644
index 0000000..b8fe168
--- /dev/null
+++ b/src/main/java/in/erail/schedular/SchedulerService.java
@@ -0,0 +1,88 @@
+package in.erail.schedular;
+
+import in.erail.glue.annotation.StartService;
+import io.reactivex.Observable;
+import io.reactivex.Scheduler;
+import io.reactivex.schedulers.Schedulers;
+import java.util.concurrent.TimeUnit;
+
+/**
+ *
+ * @author vinay
+ */
+public abstract class SchedulerService {
+
+ private SchedulerType mSchedularType;
+ private TimeUnit mTimeUnit;
+ private long mInterval;
+ private boolean mRecurring;
+
+ @StartService
+ void start() {
+
+ Scheduler scheduler;
+
+ switch (mSchedularType) {
+ case COMPUTATION:
+ scheduler = Schedulers.computation();
+ break;
+ case IO:
+ scheduler = Schedulers.io();
+ break;
+ case NEWTHREAD:
+ scheduler = Schedulers.newThread();
+ break;
+ case SINGLE:
+ scheduler = Schedulers.single();
+ break;
+ default:
+ scheduler = Schedulers.io();
+ }
+
+ if (isRecurring()) {
+ Observable
+ .interval(getInterval(), getTimeUnit(), scheduler)
+ .subscribe(this::performScheduledTask);
+ } else {
+ Observable
+ .timer(getInterval(), getTimeUnit(), scheduler)
+ .subscribe(this::performScheduledTask);
+ }
+ }
+
+ public void performScheduledTask(Long pId) {
+ }
+
+ public SchedulerType getSchedularType() {
+ return mSchedularType;
+ }
+
+ public void setSchedularType(SchedulerType pSchedularType) {
+ this.mSchedularType = pSchedularType;
+ }
+
+ public TimeUnit getTimeUnit() {
+ return mTimeUnit;
+ }
+
+ public void setTimeUnit(TimeUnit pTimeUnit) {
+ this.mTimeUnit = pTimeUnit;
+ }
+
+ public long getInterval() {
+ return mInterval;
+ }
+
+ public void setInterval(long pInterval) {
+ this.mInterval = pInterval;
+ }
+
+ public boolean isRecurring() {
+ return mRecurring;
+ }
+
+ public void setRecurring(boolean pRecurring) {
+ this.mRecurring = pRecurring;
+ }
+
+}
diff --git a/src/main/java/in/erail/schedular/SchedulerType.java b/src/main/java/in/erail/schedular/SchedulerType.java
new file mode 100644
index 0000000..336373a
--- /dev/null
+++ b/src/main/java/in/erail/schedular/SchedulerType.java
@@ -0,0 +1,12 @@
+package in.erail.schedular;
+
+/**
+ *
+ * @author vinay
+ */
+public enum SchedulerType {
+ COMPUTATION,
+ IO,
+ NEWTHREAD,
+ SINGLE;
+}
diff --git a/src/main/java/io/vertx/reactivex/ext/mongo/MongoClientInstance.java b/src/main/java/io/vertx/reactivex/ext/mongo/MongoClientInstance.java
new file mode 100644
index 0000000..f9aa3fe
--- /dev/null
+++ b/src/main/java/io/vertx/reactivex/ext/mongo/MongoClientInstance.java
@@ -0,0 +1,57 @@
+package io.vertx.reactivex.ext.mongo;
+
+import in.erail.glue.annotation.StartService;
+import io.vertx.core.json.JsonObject;
+import io.vertx.reactivex.core.Vertx;
+
+/**
+ *
+ * @author vinay
+ */
+public class MongoClientInstance {
+
+ private MongoClient mMongoClient;
+ private Vertx mVertx;
+ private JsonObject mConfig;
+ private boolean mEnable;
+
+ @StartService
+ public void start() {
+ if (isEnable()) {
+ mMongoClient = MongoClient.createShared(getVertx(), getConfig());
+ }
+ }
+
+ public MongoClient getMongoClient() {
+ return mMongoClient;
+ }
+
+ public void setMongoClient(MongoClient pMongoClient) {
+ this.mMongoClient = pMongoClient;
+ }
+
+ public Vertx getVertx() {
+ return mVertx;
+ }
+
+ public void setVertx(Vertx pVertx) {
+ this.mVertx = pVertx;
+ }
+
+ public JsonObject getConfig() {
+ return mConfig;
+ }
+
+ public void setConfig(JsonObject pConfig) {
+ this.mConfig = pConfig;
+ }
+
+ public boolean isEnable() {
+ return mEnable;
+ }
+
+ public void setEnable(boolean pEnable) {
+ this.mEnable = pEnable;
+ }
+
+}