split example
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6ddbc53
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,30 @@
+# maven ignore
+target/
+*.jar
+*.war
+*.zip
+*.tar
+
+# eclipse ignore
+.settings/
+.project
+.classpath
+
+# idea ignore
+.idea/
+*.ipr
+*.iml
+*.iws
+
+# temp ignore
+logs/
+*.doc
+*.log
+*.cache
+*.diff
+*.patch
+*.tmp
+
+# system ignore
+.DS_Store
+Thumbs.db
diff --git a/elastic-job-example-cloud/pom.xml b/elastic-job-example-cloud/pom.xml
new file mode 100644
index 0000000..e9c1d0f
--- /dev/null
+++ b/elastic-job-example-cloud/pom.xml
@@ -0,0 +1,63 @@
+<?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>elastic-job-example</artifactId>
+        <groupId>com.dangdang</groupId>
+        <version>2.1.6-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>elastic-job-example-cloud</artifactId>
+    <name>${project.artifactId}</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-example-jobs</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-cloud-executor</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+    </dependencies>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <descriptors>
+                        <descriptor>src/main/resources/assembly/assembly.xml</descriptor>
+                    </descriptors>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>assembly</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/elastic-job-example-cloud/src/README.txt b/elastic-job-example-cloud/src/README.txt
new file mode 100644
index 0000000..af05b27
--- /dev/null
+++ b/elastic-job-example-cloud/src/README.txt
@@ -0,0 +1,41 @@
+部署步骤
+启动Zookeeper, Mesos Master/Agent以及Elastic-Job-Cloud-Scheduler。
+
+将打包之后的作业tar.gz文件放至网络可访问的位置,如:ftp或http。打包的tar.gz文件中Main方法需要调用Elastic-Job-Cloud提供的JobBootstrap.execute方法。
+
+使用curl命令调用RESTful API注册作业。
+
+RESTful API:Elastic-Job-Cloud提供作业及应用注册/注销RESTful API,可通过curl操作。
+
+a.注册应用
+curl -l -H "Content-type: application/json" -X POST -d '{"appName":"foo_app","appURL":"http://app_host:8080/yourJobs.gz","cpuCount":0.1,"memoryMB":64.0,"bootstrapScript":"bin/start.sh","appCacheEnable":true}' http://elastic_job_cloud_host:8899/api/app
+
+b. 注册作业
+注册的作业可用Java和Spring两种启动方式,作业启动在开发指南中有说明,这里只举例说明两种方式如何注册。
+1. Java启动方式作业注册
+curl -l -H "Content-type: application/json" -X POST -d '{"jobName":"foo_job","jobClass":"yourJobClass","jobType":"SIMPLE","jobExecutionType":"TRANSIENT","cron":"0/5 * * * * ?","shardingTotalCount":5,"cpuCount":0.1,"memoryMB":64.0,"appName":"foo_app","failover":true,"misfire":true}' http://elastic_job_cloud_host:8899/api/job/register
+
+2. Spring启动方式作业注册
+curl -l -H "Content-type: application/json" -X POST -d '{"jobName":"foo_job","beanName":"yourBeanName","applicationContext":"applicationContext.xml","jobType":"SIMPLE","jobExecutionType":"TRANSIENT","cron":"0/5 * * * * ?","shardingTotalCount":5,"cpuCount":0.1,"memoryMB":64.0,"appName":"foo_app","failover":true,"misfire":true}' http://elastic_job_cloud_host:8899/api/job/register
+
+参数详细配置请见:http://elasticjob.io/elastic-job/elastic-job-cloud/02-guide/cloud-restful-api/
+
+
+注册demo作业的快捷命令:
+
+1. 注册APP:
+curl -l -H "Content-type: application/json" -X POST -d '{"appName":"exampleApp","appURL":"http://localhost:8080/elastic-job-example-cloud-2.1.4.tar.gz","cpuCount":0.1,"memoryMB":64.0,"bootstrapScript":"bin/start.sh","appCacheEnable":true}' http://localhost:8899/api/app
+
+2. Java启动方式作业注册:
+
+curl -l -H "Content-type: application/json" -X POST -d '{"jobName":"test_job_simple","appName":"exampleApp","jobType":"SIMPLE","jobExecutionType":"TRANSIENT","jobClass":"com.dangdang.ddframe.job.example.job.simple.JavaSimpleJob","cron":"0/10 * * * * ?","shardingTotalCount":1,"cpuCount":0.1,"memoryMB":64.0}' http://localhost:8899/api/job/register
+
+curl -l -H "Content-type: application/json" -X POST -d '{"jobName":"test_job_dataflow","appName":"exampleApp","jobType":"DATAFLOW","jobExecutionType":"DAEMON","jobClass":"com.dangdang.ddframe.job.example.job.dataflow.JavaDataflowJob","cron":"0/10 * * * * ?","shardingTotalCount":3,"cpuCount":0.1,"memoryMB":64.0}' http://localhost:8899/api/job/register
+
+curl -l -H "Content-type: application/json" -X POST -d '{"jobName":"test_job_script","appName":"exampleApp","jobType":"SCRIPT","jobExecutionType":"TRANSIENT","cron":"0/10 * * * * ?","shardingTotalCount":3,"cpuCount":0.1,"memoryMB":64.0, scriptCommandLine="script/demo.sh"}' http://localhost:8899/api/job/register
+
+3. Spring启动方式作业注册:
+
+curl -l -H "Content-type: application/json" -X POST -d '{"jobName":"test_job_simple_spring","appName":"exampleApp","jobType":"SIMPLE","jobExecutionType":"TRANSIENT","jobClass":"com.dangdang.ddframe.job.example.job.simple.SpringSimpleJob","beanName":"springSimpleJob","applicationContext":"classpath:META-INF/applicationContext.xml","cron":"0/10 * * * * ?","shardingTotalCount":1,"cpuCount":0.1,"memoryMB":64.0}' http://localhost:8899/api/job/register
+
+curl -l -H "Content-type: application/json" -X POST -d '{"jobName":"test_job_dataflow_spring","appName":"exampleApp","jobType":"DATAFLOW","jobExecutionType":"DAEMON","jobClass":"com.dangdang.ddframe.job.example.job.dataflow.SpringDataflowJob","beanName":"springDataflowJob","applicationContext":"classpath:META-INF/applicationContext.xml","cron":"0/10 * * * * ?","shardingTotalCount":3,"cpuCount":0.1,"memoryMB":64.0}' http://localhost:8899/api/job/register
diff --git a/elastic-job-example-cloud/src/main/java/com/dangdang/ddframe/job/example/CloudJobMain.java b/elastic-job-example-cloud/src/main/java/com/dangdang/ddframe/job/example/CloudJobMain.java
new file mode 100644
index 0000000..5967372
--- /dev/null
+++ b/elastic-job-example-cloud/src/main/java/com/dangdang/ddframe/job/example/CloudJobMain.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example;
+
+import com.dangdang.ddframe.job.cloud.api.JobBootstrap;
+
+public final class CloudJobMain {
+    
+    // CHECKSTYLE:OFF
+    public static void main(final String[] args) {
+    // CHECKSTYLE:ON
+        JobBootstrap.execute();
+    }
+}
diff --git a/elastic-job-example-cloud/src/main/resources/META-INF/applicationContext.xml b/elastic-job-example-cloud/src/main/resources/META-INF/applicationContext.xml
new file mode 100644
index 0000000..02958b4
--- /dev/null
+++ b/elastic-job-example-cloud/src/main/resources/META-INF/applicationContext.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:context="http://www.springframework.org/schema/context" 
+    xsi:schemaLocation="http://www.springframework.org/schema/beans 
+                        http://www.springframework.org/schema/beans/spring-beans.xsd 
+                        http://www.springframework.org/schema/context 
+                        http://www.springframework.org/schema/context/spring-context.xsd 
+                        ">
+    <context:component-scan base-package="com.dangdang.ddframe.job.example" />
+    
+    <bean id="springSimpleJob" class="com.dangdang.ddframe.job.example.job.simple.SpringSimpleJob" />
+    <bean id="springDataflowJob" class="com.dangdang.ddframe.job.example.job.dataflow.SpringDataflowJob" />
+</beans>
diff --git a/elastic-job-example-cloud/src/main/resources/assembly/assembly.xml b/elastic-job-example-cloud/src/main/resources/assembly/assembly.xml
new file mode 100644
index 0000000..188c0fc
--- /dev/null
+++ b/elastic-job-example-cloud/src/main/resources/assembly/assembly.xml
@@ -0,0 +1,25 @@
+<assembly>
+    <formats>
+        <format>tar.gz</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <fileSets>
+        <fileSet>
+            <directory>src/main/resources/bin</directory>
+            <outputDirectory>bin</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+        <fileSet>
+            <directory>src/main/resources/script</directory>
+            <outputDirectory>script</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+    </fileSets>
+    
+    <dependencySets>
+        <dependencySet>
+            <outputDirectory>lib</outputDirectory>
+            <fileMode>0644</fileMode>
+        </dependencySet>
+    </dependencySets>
+</assembly>
diff --git a/elastic-job-example-cloud/src/main/resources/bin/start.sh b/elastic-job-example-cloud/src/main/resources/bin/start.sh
new file mode 100755
index 0000000..15d98fc
--- /dev/null
+++ b/elastic-job-example-cloud/src/main/resources/bin/start.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+java -classpath lib/*:. com.dangdang.ddframe.job.example.CloudJobMain
diff --git a/elastic-job-example-cloud/src/main/resources/logback.xml b/elastic-job-example-cloud/src/main/resources/logback.xml
new file mode 100644
index 0000000..b2476be
--- /dev/null
+++ b/elastic-job-example-cloud/src/main/resources/logback.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    
+    <property name="log.context.name" value="elastic-job-example-cloud" />
+    <property name="log.charset" value="UTF-8" />
+    <property name="log.pattern" value="[%-5level] %date --%thread-- [%logger] %msg %n" />
+    
+    <contextName>${log.context.name}</contextName>
+    
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder charset="${log.charset}">
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+    
+    <root>
+        <level value="INFO" />
+        <appender-ref ref="STDOUT" />
+    </root>
+    
+    <logger name="org.apache.zookeeper" level="WARN"/>
+    <logger name="org.apache.curator" level="WARN"/>
+</configuration>
diff --git a/elastic-job-example-cloud/src/main/resources/script/demo.sh b/elastic-job-example-cloud/src/main/resources/script/demo.sh
new file mode 100755
index 0000000..7c67ff7
--- /dev/null
+++ b/elastic-job-example-cloud/src/main/resources/script/demo.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+echo sharding execution context is $*
\ No newline at end of file
diff --git a/elastic-job-example-embed-zk/pom.xml b/elastic-job-example-embed-zk/pom.xml
new file mode 100644
index 0000000..b8e282a
--- /dev/null
+++ b/elastic-job-example-embed-zk/pom.xml
@@ -0,0 +1,20 @@
+<?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>elastic-job-example</artifactId>
+        <groupId>com.dangdang</groupId>
+        <version>2.1.6-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>elastic-job-example-embed-zk</artifactId>
+    <name>${project.artifactId}</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.curator</groupId>
+            <artifactId>curator-test</artifactId>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/elastic-job-example-embed-zk/src/main/java/com/dangdang/ddframe/job/example/EmbedZookeeperServer.java b/elastic-job-example-embed-zk/src/main/java/com/dangdang/ddframe/job/example/EmbedZookeeperServer.java
new file mode 100644
index 0000000..03c944c
--- /dev/null
+++ b/elastic-job-example-embed-zk/src/main/java/com/dangdang/ddframe/job/example/EmbedZookeeperServer.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example;
+
+import org.apache.curator.test.TestingServer;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * 内存版的内嵌Zookeeper.
+ * 
+ * <p>
+ *     仅用于运行Elastic-Job的例子时无需额外启动Zookeeper. 如有必要, 请使用本地环境可用的Zookeeper代替.
+ * </p>
+ */
+public final class EmbedZookeeperServer {
+    
+    private static TestingServer testingServer;
+    
+    /**
+     * 内存版的内嵌Zookeeper.
+     * 
+     * @param port Zookeeper的通信端口号
+     */
+    public static void start(final int port) {
+        try {
+            testingServer = new TestingServer(port, new File(String.format("target/test_zk_data/%s/", System.nanoTime())));
+        // CHECKSTYLE:OFF
+        } catch (final Exception ex) {
+        // CHECKSTYLE:ON
+            ex.printStackTrace();
+        } finally {
+            Runtime.getRuntime().addShutdownHook(new Thread() {
+                
+                @Override
+                public void run() {
+                    try {
+                        Thread.sleep(1000L);
+                        testingServer.close();
+                    } catch (final InterruptedException | IOException ex) {
+                    }
+                }
+            });
+        }
+    }
+}
diff --git a/elastic-job-example-jobs/pom.xml b/elastic-job-example-jobs/pom.xml
new file mode 100644
index 0000000..9b64bbe
--- /dev/null
+++ b/elastic-job-example-jobs/pom.xml
@@ -0,0 +1,22 @@
+<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>elastic-job-example</artifactId>
+        <groupId>com.dangdang</groupId>
+        <version>2.1.6-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>elastic-job-example-jobs</artifactId>
+    <name>${project.artifactId}</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-common-core</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/fixture/entity/Foo.java b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/fixture/entity/Foo.java
new file mode 100644
index 0000000..4acdfb6
--- /dev/null
+++ b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/fixture/entity/Foo.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.fixture.entity;
+
+import java.io.Serializable;
+
+public final class Foo implements Serializable {
+    
+    private static final long serialVersionUID = 2706842871078949451L;
+    
+    private final long id;
+    
+    private final String location;
+    
+    private Status status;
+    
+    public Foo(final long id, final String location, final Status status) {
+        this.id = id;
+        this.location = location;
+        this.status = status;
+    }
+    
+    public long getId() {
+        return id;
+    }
+    
+    public String getLocation() {
+        return location;
+    }
+    
+    public Status getStatus() {
+        return status;
+    }
+    
+    public void setStatus(final Status status) {
+        this.status = status;
+    }
+    
+    public String toString() {
+        return String.format("id: %s, location: %s, status: %s", id, location, status);
+    }
+    
+    public enum Status {
+        TODO,
+        COMPLETED
+    }
+}
diff --git a/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/fixture/repository/FooRepository.java b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/fixture/repository/FooRepository.java
new file mode 100644
index 0000000..2ce4577
--- /dev/null
+++ b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/fixture/repository/FooRepository.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.fixture.repository;
+
+import com.dangdang.ddframe.job.example.fixture.entity.Foo;
+import org.springframework.stereotype.Repository;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Repository
+public class FooRepository {
+    
+    private Map<Long, Foo> data = new ConcurrentHashMap<>(300, 1);
+    
+    public FooRepository() {
+        init();
+    }
+    
+    private void init() {
+        addData(0L, 100L, "Beijing");
+        addData(100L, 200L, "Shanghai");
+        addData(200L, 300L, "Guangzhou");
+    }
+    
+    private void addData(final long idFrom, final long idTo, final String location) {
+        for (long i = idFrom; i < idTo; i++) {
+            data.put(i, new Foo(i, location, Foo.Status.TODO));
+        }
+    }
+    
+    public List<Foo> findTodoData(final String location, final int limit) {
+        List<Foo> result = new ArrayList<>(limit);
+        int count = 0;
+        for (Map.Entry<Long, Foo> each : data.entrySet()) {
+            Foo foo = each.getValue();
+            if (foo.getLocation().equals(location) && foo.getStatus() == Foo.Status.TODO) {
+                result.add(foo);
+                count++;
+                if (count == limit) {
+                    break;
+                }
+            }
+        }
+        return result;
+    }
+    
+    public void setCompleted(final long id) {
+        data.get(id).setStatus(Foo.Status.COMPLETED);
+    }
+}
diff --git a/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/fixture/repository/FooRepositoryFactory.java b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/fixture/repository/FooRepositoryFactory.java
new file mode 100644
index 0000000..fd47341
--- /dev/null
+++ b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/fixture/repository/FooRepositoryFactory.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.fixture.repository;
+
+public final class FooRepositoryFactory {
+    
+    private static FooRepository fooRepository = new FooRepository();
+    
+    public static FooRepository getFooRepository() {
+        return fooRepository;
+    }
+    
+}
diff --git a/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/dataflow/JavaDataflowJob.java b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/dataflow/JavaDataflowJob.java
new file mode 100644
index 0000000..9c49240
--- /dev/null
+++ b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/dataflow/JavaDataflowJob.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.job.dataflow;
+
+import com.dangdang.ddframe.job.api.ShardingContext;
+import com.dangdang.ddframe.job.api.dataflow.DataflowJob;
+import com.dangdang.ddframe.job.example.fixture.entity.Foo;
+import com.dangdang.ddframe.job.example.fixture.repository.FooRepository;
+import com.dangdang.ddframe.job.example.fixture.repository.FooRepositoryFactory;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+public class JavaDataflowJob implements DataflowJob<Foo> {
+    
+    private FooRepository fooRepository = FooRepositoryFactory.getFooRepository();
+    
+    @Override
+    public List<Foo> fetchData(final ShardingContext shardingContext) {
+        System.out.println(String.format("Item: %s | Time: %s | Thread: %s | %s",
+                shardingContext.getShardingItem(), new SimpleDateFormat("HH:mm:ss").format(new Date()), Thread.currentThread().getId(), "DATAFLOW FETCH"));
+        return fooRepository.findTodoData(shardingContext.getShardingParameter(), 10);
+    }
+    
+    @Override
+    public void processData(final ShardingContext shardingContext, final List<Foo> data) {
+        System.out.println(String.format("Item: %s | Time: %s | Thread: %s | %s",
+                shardingContext.getShardingItem(), new SimpleDateFormat("HH:mm:ss").format(new Date()), Thread.currentThread().getId(), "DATAFLOW PROCESS"));
+        for (Foo each : data) {
+            fooRepository.setCompleted(each.getId());
+        }
+    }
+}
diff --git a/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/dataflow/SpringDataflowJob.java b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/dataflow/SpringDataflowJob.java
new file mode 100644
index 0000000..02f4590
--- /dev/null
+++ b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/dataflow/SpringDataflowJob.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.job.dataflow;
+
+import com.dangdang.ddframe.job.api.ShardingContext;
+import com.dangdang.ddframe.job.api.dataflow.DataflowJob;
+import com.dangdang.ddframe.job.example.fixture.entity.Foo;
+import com.dangdang.ddframe.job.example.fixture.repository.FooRepository;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+public class SpringDataflowJob implements DataflowJob<Foo> {
+    
+    @Resource
+    private FooRepository fooRepository;
+    
+    @Override
+    public List<Foo> fetchData(final ShardingContext shardingContext) {
+        System.out.println(String.format("Item: %s | Time: %s | Thread: %s | %s",
+                shardingContext.getShardingItem(), new SimpleDateFormat("HH:mm:ss").format(new Date()), Thread.currentThread().getId(), "DATAFLOW FETCH"));
+        return fooRepository.findTodoData(shardingContext.getShardingParameter(), 10);
+    }
+    
+    @Override
+    public void processData(final ShardingContext shardingContext, final List<Foo> data) {
+        System.out.println(String.format("Item: %s | Time: %s | Thread: %s | %s",
+                shardingContext.getShardingItem(), new SimpleDateFormat("HH:mm:ss").format(new Date()), Thread.currentThread().getId(), "DATAFLOW PROCESS"));
+        for (Foo each : data) {
+            fooRepository.setCompleted(each.getId());
+        }
+    }
+}
diff --git a/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/simple/JavaSimpleJob.java b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/simple/JavaSimpleJob.java
new file mode 100644
index 0000000..511ac11
--- /dev/null
+++ b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/simple/JavaSimpleJob.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.job.simple;
+
+import com.dangdang.ddframe.job.api.ShardingContext;
+import com.dangdang.ddframe.job.api.simple.SimpleJob;
+import com.dangdang.ddframe.job.example.fixture.entity.Foo;
+import com.dangdang.ddframe.job.example.fixture.repository.FooRepository;
+import com.dangdang.ddframe.job.example.fixture.repository.FooRepositoryFactory;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+public class JavaSimpleJob implements SimpleJob {
+    
+    private FooRepository fooRepository = FooRepositoryFactory.getFooRepository();
+    
+    @Override
+    public void execute(final ShardingContext shardingContext) {
+        System.out.println(String.format("Item: %s | Time: %s | Thread: %s | %s",
+                shardingContext.getShardingItem(), new SimpleDateFormat("HH:mm:ss").format(new Date()), Thread.currentThread().getId(), "SIMPLE"));
+        List<Foo> data = fooRepository.findTodoData(shardingContext.getShardingParameter(), 10);
+        for (Foo each : data) {
+            fooRepository.setCompleted(each.getId());
+        }
+    }
+}
diff --git a/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/simple/SpringSimpleJob.java b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/simple/SpringSimpleJob.java
new file mode 100644
index 0000000..eadd649
--- /dev/null
+++ b/elastic-job-example-jobs/src/main/java/com/dangdang/ddframe/job/example/job/simple/SpringSimpleJob.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.job.simple;
+
+import com.dangdang.ddframe.job.api.ShardingContext;
+import com.dangdang.ddframe.job.api.simple.SimpleJob;
+import com.dangdang.ddframe.job.example.fixture.entity.Foo;
+import com.dangdang.ddframe.job.example.fixture.repository.FooRepository;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+public class SpringSimpleJob implements SimpleJob {
+    
+    @Resource
+    private FooRepository fooRepository;
+    
+    @Override
+    public void execute(final ShardingContext shardingContext) {
+        System.out.println(String.format("Item: %s | Time: %s | Thread: %s | %s",
+                shardingContext.getShardingItem(), new SimpleDateFormat("HH:mm:ss").format(new Date()), Thread.currentThread().getId(), "SIMPLE"));
+        List<Foo> data = fooRepository.findTodoData(shardingContext.getShardingParameter(), 10);
+        for (Foo each : data) {
+            fooRepository.setCompleted(each.getId());
+        }
+    }
+}
diff --git a/elastic-job-example-lite-java/pom.xml b/elastic-job-example-lite-java/pom.xml
new file mode 100644
index 0000000..d79a4f4
--- /dev/null
+++ b/elastic-job-example-lite-java/pom.xml
@@ -0,0 +1,60 @@
+<?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>elastic-job-example</artifactId>
+        <groupId>com.dangdang</groupId>
+        <version>2.1.6-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>elastic-job-example-lite-java</artifactId>
+    <name>${project.artifactId}</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-example-jobs</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-example-embed-zk</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-lite-core</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-dbcp</groupId>
+            <artifactId>commons-dbcp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/elastic-job-example-lite-java/src/main/java/com/dangdang/ddframe/job/example/JavaMain.java b/elastic-job-example-lite-java/src/main/java/com/dangdang/ddframe/job/example/JavaMain.java
new file mode 100644
index 0000000..18eb906
--- /dev/null
+++ b/elastic-job-example-lite-java/src/main/java/com/dangdang/ddframe/job/example/JavaMain.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example;
+
+import com.dangdang.ddframe.job.config.JobCoreConfiguration;
+import com.dangdang.ddframe.job.config.dataflow.DataflowJobConfiguration;
+import com.dangdang.ddframe.job.config.script.ScriptJobConfiguration;
+import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
+import com.dangdang.ddframe.job.event.JobEventConfiguration;
+import com.dangdang.ddframe.job.event.rdb.JobEventRdbConfiguration;
+import com.dangdang.ddframe.job.example.job.dataflow.JavaDataflowJob;
+import com.dangdang.ddframe.job.example.job.simple.JavaSimpleJob;
+import com.dangdang.ddframe.job.lite.api.JobScheduler;
+import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
+import com.dangdang.ddframe.job.reg.base.CoordinatorRegistryCenter;
+import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
+import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
+import org.apache.commons.dbcp.BasicDataSource;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.PosixFilePermissions;
+
+public final class JavaMain {
+    
+    private static final int EMBED_ZOOKEEPER_PORT = 4181;
+    
+    private static final String ZOOKEEPER_CONNECTION_STRING = "localhost:" + EMBED_ZOOKEEPER_PORT;
+    
+    private static final String JOB_NAMESPACE = "elastic-job-example-lite-java";
+    
+    // switch to MySQL by yourself
+//    private static final String EVENT_RDB_STORAGE_DRIVER = "com.mysql.jdbc.Driver";
+//    private static final String EVENT_RDB_STORAGE_URL = "jdbc:mysql://localhost:3306/elastic_job_log";
+    
+    private static final String EVENT_RDB_STORAGE_DRIVER = "org.h2.Driver";
+    
+    private static final String EVENT_RDB_STORAGE_URL = "jdbc:h2:mem:job_event_storage";
+    
+    private static final String EVENT_RDB_STORAGE_USERNAME = "sa";
+    
+    private static final String EVENT_RDB_STORAGE_PASSWORD = "";
+    
+    // CHECKSTYLE:OFF
+    public static void main(final String[] args) throws IOException {
+    // CHECKSTYLE:ON
+        EmbedZookeeperServer.start(EMBED_ZOOKEEPER_PORT);
+        CoordinatorRegistryCenter regCenter = setUpRegistryCenter();
+        JobEventConfiguration jobEventConfig = new JobEventRdbConfiguration(setUpEventTraceDataSource());
+        setUpSimpleJob(regCenter, jobEventConfig);
+        setUpDataflowJob(regCenter, jobEventConfig);
+        setUpScriptJob(regCenter, jobEventConfig);
+    }
+    
+    private static CoordinatorRegistryCenter setUpRegistryCenter() {
+        ZookeeperConfiguration zkConfig = new ZookeeperConfiguration(ZOOKEEPER_CONNECTION_STRING, JOB_NAMESPACE);
+        CoordinatorRegistryCenter result = new ZookeeperRegistryCenter(zkConfig);
+        result.init();
+        return result;
+    }
+    
+    private static DataSource setUpEventTraceDataSource() {
+        BasicDataSource result = new BasicDataSource();
+        result.setDriverClassName(EVENT_RDB_STORAGE_DRIVER);
+        result.setUrl(EVENT_RDB_STORAGE_URL);
+        result.setUsername(EVENT_RDB_STORAGE_USERNAME);
+        result.setPassword(EVENT_RDB_STORAGE_PASSWORD);
+        return result;
+    }
+    
+    private static void setUpSimpleJob(final CoordinatorRegistryCenter regCenter, final JobEventConfiguration jobEventConfig) {
+        JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder("javaSimpleJob", "0/5 * * * * ?", 3).shardingItemParameters("0=Beijing,1=Shanghai,2=Guangzhou").build();
+        SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(coreConfig, JavaSimpleJob.class.getCanonicalName());
+        new JobScheduler(regCenter, LiteJobConfiguration.newBuilder(simpleJobConfig).build(), jobEventConfig).init();
+    }
+    
+    private static void setUpDataflowJob(final CoordinatorRegistryCenter regCenter, final JobEventConfiguration jobEventConfig) {
+        JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder("javaDataflowElasticJob", "0/5 * * * * ?", 3).shardingItemParameters("0=Beijing,1=Shanghai,2=Guangzhou").build();
+        DataflowJobConfiguration dataflowJobConfig = new DataflowJobConfiguration(coreConfig, JavaDataflowJob.class.getCanonicalName(), true);
+        new JobScheduler(regCenter, LiteJobConfiguration.newBuilder(dataflowJobConfig).build(), jobEventConfig).init();
+    }
+    
+    private static void setUpScriptJob(final CoordinatorRegistryCenter regCenter, final JobEventConfiguration jobEventConfig) throws IOException {
+        JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder("scriptElasticJob", "0/5 * * * * ?", 3).build();
+        ScriptJobConfiguration scriptJobConfig = new ScriptJobConfiguration(coreConfig, buildScriptCommandLine());
+        new JobScheduler(regCenter, LiteJobConfiguration.newBuilder(scriptJobConfig).build(), jobEventConfig).init();
+    }
+    
+    private static String buildScriptCommandLine() throws IOException {
+        if (System.getProperties().getProperty("os.name").contains("Windows")) {
+            return Paths.get(JavaMain.class.getResource("/script/demo.bat").getPath().substring(1)).toString();
+        }
+        Path result = Paths.get(JavaMain.class.getResource("/script/demo.sh").getPath());
+        Files.setPosixFilePermissions(result, PosixFilePermissions.fromString("rwxr-xr-x"));
+        return result.toString();
+    }
+}
diff --git a/elastic-job-example-lite-java/src/main/resources/logback.xml b/elastic-job-example-lite-java/src/main/resources/logback.xml
new file mode 100644
index 0000000..d373c39
--- /dev/null
+++ b/elastic-job-example-lite-java/src/main/resources/logback.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    
+    <property name="log.context.name" value="elastic-job-example-lite" />
+    <property name="log.charset" value="UTF-8" />
+    <property name="log.pattern" value="[%-5level] %date --%thread-- [%logger] %msg %n" />
+    
+    <contextName>${log.context.name}</contextName>
+    
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder charset="${log.charset}">
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+    
+    <root>
+        <level value="INFO" />
+        <appender-ref ref="STDOUT" />
+    </root>
+    
+    <logger name="org.apache.zookeeper" level="WARN" />
+    <logger name="org.apache.curator" level="WARN" />
+</configuration>
diff --git a/elastic-job-example-lite-java/src/main/resources/script/demo.bat b/elastic-job-example-lite-java/src/main/resources/script/demo.bat
new file mode 100755
index 0000000..74a9640
--- /dev/null
+++ b/elastic-job-example-lite-java/src/main/resources/script/demo.bat
@@ -0,0 +1 @@
+@echo Sharding Context: %*
diff --git a/elastic-job-example-lite-java/src/main/resources/script/demo.sh b/elastic-job-example-lite-java/src/main/resources/script/demo.sh
new file mode 100755
index 0000000..3eccad3
--- /dev/null
+++ b/elastic-job-example-lite-java/src/main/resources/script/demo.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+echo Sharding Context: $*
diff --git a/elastic-job-example-lite-spring/pom.xml b/elastic-job-example-lite-spring/pom.xml
new file mode 100644
index 0000000..30b5937
--- /dev/null
+++ b/elastic-job-example-lite-spring/pom.xml
@@ -0,0 +1,64 @@
+<?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>elastic-job-example</artifactId>
+        <groupId>com.dangdang</groupId>
+        <version>2.1.6-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>elastic-job-example-lite-spring</artifactId>
+    <name>${project.artifactId}</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-example-jobs</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-example-embed-zk</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-lite-spring</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-dbcp</groupId>
+            <artifactId>commons-dbcp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/elastic-job-example-lite-spring/src/main/java/com/dangdang/ddframe/job/example/SpringMain.java b/elastic-job-example-lite-spring/src/main/java/com/dangdang/ddframe/job/example/SpringMain.java
new file mode 100644
index 0000000..a0ce284
--- /dev/null
+++ b/elastic-job-example-lite-spring/src/main/java/com/dangdang/ddframe/job/example/SpringMain.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example;
+
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public final class SpringMain {
+    
+    private static final int EMBED_ZOOKEEPER_PORT = 5181;
+    
+    // CHECKSTYLE:OFF
+    public static void main(final String[] args) {
+    // CHECKSTYLE:ON
+        EmbedZookeeperServer.start(EMBED_ZOOKEEPER_PORT);
+        new ClassPathXmlApplicationContext("classpath:META-INF/applicationContext.xml");
+    }
+}
diff --git a/elastic-job-example-lite-spring/src/main/resources/META-INF/applicationContext.xml b/elastic-job-example-lite-spring/src/main/resources/META-INF/applicationContext.xml
new file mode 100644
index 0000000..0705947
--- /dev/null
+++ b/elastic-job-example-lite-spring/src/main/resources/META-INF/applicationContext.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:context="http://www.springframework.org/schema/context" 
+    xmlns:reg="http://www.dangdang.com/schema/ddframe/reg" 
+    xmlns:job="http://www.dangdang.com/schema/ddframe/job" 
+    xsi:schemaLocation="http://www.springframework.org/schema/beans 
+                        http://www.springframework.org/schema/beans/spring-beans.xsd 
+                        http://www.springframework.org/schema/context 
+                        http://www.springframework.org/schema/context/spring-context.xsd 
+                        http://www.dangdang.com/schema/ddframe/reg 
+                        http://www.dangdang.com/schema/ddframe/reg/reg.xsd 
+                        http://www.dangdang.com/schema/ddframe/job 
+                        http://www.dangdang.com/schema/ddframe/job/job.xsd 
+                        ">
+    <context:component-scan base-package="com.dangdang.ddframe.job.example" />
+    <context:property-placeholder location="classpath:conf/*.properties" />
+    
+    <bean id="elasticJobLog" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
+        <property name="driverClassName" value="${event.rdb.driver}"/>
+        <property name="url" value="${event.rdb.url}"/>
+        <property name="username" value="${event.rdb.username}"/>
+        <property name="password" value="${event.rdb.password}"/>
+    </bean>
+    
+    <reg:zookeeper id="regCenter" server-lists="${serverLists}" namespace="${namespace}" base-sleep-time-milliseconds="${baseSleepTimeMilliseconds}" max-sleep-time-milliseconds="${maxSleepTimeMilliseconds}" max-retries="${maxRetries}" />
+    
+    <job:simple id="${simple.id}" class="${simple.class}" registry-center-ref="regCenter" sharding-total-count="${simple.shardingTotalCount}" cron="${simple.cron}" sharding-item-parameters="${simple.shardingItemParameters}" monitor-execution="${simple.monitorExecution}" monitor-port="${simple.monitorPort}" failover="${simple.failover}" description="${simple.description}" disabled="${simple.disabled}" overwrite="${simple.overwrite}" event-trace-rdb-data-source="elasticJobLog" />
+    <job:dataflow id="${dataflow.id}" class="${dataflow.class}" registry-center-ref="regCenter" sharding-total-count="${dataflow.shardingTotalCount}" cron="${dataflow.cron}" sharding-item-parameters="${dataflow.shardingItemParameters}" monitor-execution="${dataflow.monitorExecution}" failover="${dataflow.failover}" max-time-diff-seconds="${dataflow.maxTimeDiffSeconds}" streaming-process="${dataflow.streamingProcess}" description="${dataflow.description}" disabled="${dataflow.disabled}" overwrite="${dataflow.overwrite}" />
+    
+    <!-- use absolute path to run script job -->
+    <!--
+    <job:script id="${script.id}" registry-center-ref="regCenter" script-command-line="${script.scriptCommandLine}" sharding-total-count="${script.shardingTotalCount}" cron="${script.cron}" sharding-item-parameters="${script.shardingItemParameters}" description="${script.description}" overwrite="${script.overwrite}" />
+    -->
+</beans>
diff --git a/elastic-job-example-lite-spring/src/main/resources/conf/job.properties b/elastic-job-example-lite-spring/src/main/resources/conf/job.properties
new file mode 100644
index 0000000..023f53e
--- /dev/null
+++ b/elastic-job-example-lite-spring/src/main/resources/conf/job.properties
@@ -0,0 +1,45 @@
+event.rdb.driver=org.h2.Driver
+event.rdb.url=jdbc:h2:mem:job_event_storage
+event.rdb.username=sa
+event.rdb.password=
+
+listener.simple=com.dangdang.ddframe.job.example.listener.SpringSimpleListener
+listener.distributed=com.dangdang.ddframe.job.example.listener.SpringSimpleDistributeListener
+listener.distributed.startedTimeoutMilliseconds=1000
+listener.distributed.completedTimeoutMilliseconds=3000
+
+simple.id=springSimpleJob
+simple.class=com.dangdang.ddframe.job.example.job.simple.SpringSimpleJob
+simple.cron=0/5 * * * * ?
+simple.shardingTotalCount=3
+simple.shardingItemParameters=0=Beijing,1=Shanghai,2=Guangzhou
+simple.monitorExecution=false
+simple.failover=true
+simple.description=\u53EA\u8FD0\u884C\u4E00\u6B21\u7684\u4F5C\u4E1A\u793A\u4F8B
+simple.disabled=false
+simple.overwrite=true
+simple.monitorPort=9888
+
+dataflow.id=springDataflowJob
+dataflow.class=com.dangdang.ddframe.job.example.job.dataflow.SpringDataflowJob
+dataflow.cron=0/5 * * * * ?
+dataflow.shardingTotalCount=3
+dataflow.shardingItemParameters=0=Beijing,1=Shanghai,2=Guangzhou
+dataflow.maxTimeDiffSeconds=-1
+dataflow.monitorExecution=true
+dataflow.failover=true
+dataflow.streamingProcess=true
+dataflow.description=\u6309\u987A\u5E8F\u4E0D\u505C\u6B62\u8FD0\u884C\u7684\u4F5C\u4E1A\u793A\u4F8B
+dataflow.disabled=false
+dataflow.overwrite=true
+
+script.id=springScriptJob
+
+# need absolute path
+script.scriptCommandLine=your_path/elastic-job/elastic-job-example/elastic-job-example-lite-spring/src/main/resources/script/demo.sh
+
+script.cron=0/5 * * * * ?
+script.shardingTotalCount=3
+script.shardingItemParameters=0=Beijing,1=Shanghai,2=Guangzhou
+script.description=Script Job
+script.overwrite=true
diff --git a/elastic-job-example-lite-spring/src/main/resources/conf/reg.properties b/elastic-job-example-lite-spring/src/main/resources/conf/reg.properties
new file mode 100644
index 0000000..5b4dce6
--- /dev/null
+++ b/elastic-job-example-lite-spring/src/main/resources/conf/reg.properties
@@ -0,0 +1,5 @@
+serverLists=localhost:5181
+namespace=elastic-job-example-lite-spring
+baseSleepTimeMilliseconds=1000
+maxSleepTimeMilliseconds=3000
+maxRetries=3
diff --git a/elastic-job-example-lite-spring/src/main/resources/logback.xml b/elastic-job-example-lite-spring/src/main/resources/logback.xml
new file mode 100644
index 0000000..d373c39
--- /dev/null
+++ b/elastic-job-example-lite-spring/src/main/resources/logback.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    
+    <property name="log.context.name" value="elastic-job-example-lite" />
+    <property name="log.charset" value="UTF-8" />
+    <property name="log.pattern" value="[%-5level] %date --%thread-- [%logger] %msg %n" />
+    
+    <contextName>${log.context.name}</contextName>
+    
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder charset="${log.charset}">
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+    
+    <root>
+        <level value="INFO" />
+        <appender-ref ref="STDOUT" />
+    </root>
+    
+    <logger name="org.apache.zookeeper" level="WARN" />
+    <logger name="org.apache.curator" level="WARN" />
+</configuration>
diff --git a/elastic-job-example-lite-spring/src/main/resources/script/demo.bat b/elastic-job-example-lite-spring/src/main/resources/script/demo.bat
new file mode 100755
index 0000000..74a9640
--- /dev/null
+++ b/elastic-job-example-lite-spring/src/main/resources/script/demo.bat
@@ -0,0 +1 @@
+@echo Sharding Context: %*
diff --git a/elastic-job-example-lite-spring/src/main/resources/script/demo.sh b/elastic-job-example-lite-spring/src/main/resources/script/demo.sh
new file mode 100755
index 0000000..3eccad3
--- /dev/null
+++ b/elastic-job-example-lite-spring/src/main/resources/script/demo.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+echo Sharding Context: $*
diff --git a/elastic-job-example-lite-springboot/pom.xml b/elastic-job-example-lite-springboot/pom.xml
new file mode 100644
index 0000000..e3549cf
--- /dev/null
+++ b/elastic-job-example-lite-springboot/pom.xml
@@ -0,0 +1,72 @@
+<?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>elastic-job-example</artifactId>
+        <groupId>com.dangdang</groupId>
+        <version>2.1.6-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    
+    <artifactId>elastic-job-example-lite-springboot</artifactId>
+    <name>${project.artifactId}</name>
+
+    <properties>
+        <springboot.version>1.4.2.RELEASE</springboot.version>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-example-jobs</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-example-embed-zk</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-lite-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.dangdang</groupId>
+            <artifactId>elastic-job-lite-spring</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+            <version>${springboot.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>${springboot.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <version>${springboot.version}</version>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+            <version>${springboot.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>${h2.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql.version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/SpringBootMain.java b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/SpringBootMain.java
new file mode 100644
index 0000000..81f404b
--- /dev/null
+++ b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/SpringBootMain.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class SpringBootMain {
+    
+    // CHECKSTYLE:OFF
+    public static void main(final String[] args) {
+    // CHECKSTYLE:ON
+        EmbedZookeeperServer.start(6181);
+        SpringApplication.run(SpringBootMain.class, args);
+    }
+}
diff --git a/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/DataflowJobConfig.java b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/DataflowJobConfig.java
new file mode 100644
index 0000000..dbbee25
--- /dev/null
+++ b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/DataflowJobConfig.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.config;
+
+import com.dangdang.ddframe.job.api.dataflow.DataflowJob;
+import com.dangdang.ddframe.job.config.JobCoreConfiguration;
+import com.dangdang.ddframe.job.config.dataflow.DataflowJobConfiguration;
+import com.dangdang.ddframe.job.event.JobEventConfiguration;
+import com.dangdang.ddframe.job.example.job.dataflow.SpringDataflowJob;
+import com.dangdang.ddframe.job.lite.api.JobScheduler;
+import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
+import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
+import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.Resource;
+
+@Configuration
+public class DataflowJobConfig {
+    
+    @Resource
+    private ZookeeperRegistryCenter regCenter;
+    
+    @Resource
+    private JobEventConfiguration jobEventConfiguration;
+    
+    @Bean
+    public DataflowJob dataflowJob() {
+        return new SpringDataflowJob(); 
+    }
+    
+    @Bean(initMethod = "init")
+    public JobScheduler dataflowJobScheduler(final DataflowJob dataflowJob, @Value("${dataflowJob.cron}") final String cron, @Value("${dataflowJob.shardingTotalCount}") final int shardingTotalCount,
+                                           @Value("${dataflowJob.shardingItemParameters}") final String shardingItemParameters) {
+        return new SpringJobScheduler(dataflowJob, regCenter, getLiteJobConfiguration(dataflowJob.getClass(), cron, shardingTotalCount, shardingItemParameters), jobEventConfiguration);
+    }
+    
+    private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends DataflowJob> jobClass, final String cron, final int shardingTotalCount, final String shardingItemParameters) {
+        return LiteJobConfiguration.newBuilder(new DataflowJobConfiguration(JobCoreConfiguration.newBuilder(
+                jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).build(), jobClass.getCanonicalName(), true)).overwrite(true).build();
+    }
+}
diff --git a/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/JobEventConfig.java b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/JobEventConfig.java
new file mode 100644
index 0000000..08691c0
--- /dev/null
+++ b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/JobEventConfig.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.config;
+
+import com.dangdang.ddframe.job.event.JobEventConfiguration;
+import com.dangdang.ddframe.job.event.rdb.JobEventRdbConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+
+@Configuration
+public class JobEventConfig {
+
+    @Resource
+    private DataSource dataSource;
+
+    @Bean
+    public JobEventConfiguration jobEventConfiguration() {
+        return new JobEventRdbConfiguration(dataSource);
+    }
+}
diff --git a/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/RegistryCenterConfig.java b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/RegistryCenterConfig.java
new file mode 100644
index 0000000..90ca5ed
--- /dev/null
+++ b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/RegistryCenterConfig.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.config;
+
+import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
+import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConditionalOnExpression("'${regCenter.serverList}'.length() > 0")
+public class RegistryCenterConfig {
+    
+    @Bean(initMethod = "init")
+    public ZookeeperRegistryCenter regCenter(@Value("${regCenter.serverList}") final String serverList, @Value("${regCenter.namespace}") final String namespace) {
+        return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));
+    }
+}
diff --git a/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/SimpleJobConfig.java b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/SimpleJobConfig.java
new file mode 100644
index 0000000..444f14c
--- /dev/null
+++ b/elastic-job-example-lite-springboot/src/main/java/com/dangdang/ddframe/job/example/config/SimpleJobConfig.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 1999-2015 dangdang.com.
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * </p>
+ */
+
+package com.dangdang.ddframe.job.example.config;
+
+import com.dangdang.ddframe.job.api.simple.SimpleJob;
+import com.dangdang.ddframe.job.config.JobCoreConfiguration;
+import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
+import com.dangdang.ddframe.job.event.JobEventConfiguration;
+import com.dangdang.ddframe.job.example.job.simple.SpringSimpleJob;
+import com.dangdang.ddframe.job.lite.api.JobScheduler;
+import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
+import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
+import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.Resource;
+
+@Configuration
+public class SimpleJobConfig {
+    
+    @Resource
+    private ZookeeperRegistryCenter regCenter;
+    
+    @Resource
+    private JobEventConfiguration jobEventConfiguration;
+    
+    @Bean
+    public SimpleJob simpleJob() {
+        return new SpringSimpleJob(); 
+    }
+    
+    @Bean(initMethod = "init")
+    public JobScheduler simpleJobScheduler(final SimpleJob simpleJob, @Value("${simpleJob.cron}") final String cron, @Value("${simpleJob.shardingTotalCount}") final int shardingTotalCount,
+                                           @Value("${simpleJob.shardingItemParameters}") final String shardingItemParameters) {
+        return new SpringJobScheduler(simpleJob, regCenter, getLiteJobConfiguration(simpleJob.getClass(), cron, shardingTotalCount, shardingItemParameters), jobEventConfiguration);
+    }
+    
+    private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends SimpleJob> jobClass, final String cron, final int shardingTotalCount, final String shardingItemParameters) {
+        return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(
+                jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).build(), jobClass.getCanonicalName())).overwrite(true).build();
+    }
+}
diff --git a/elastic-job-example-lite-springboot/src/main/resources/application-dev.yml b/elastic-job-example-lite-springboot/src/main/resources/application-dev.yml
new file mode 100755
index 0000000..748ffd5
--- /dev/null
+++ b/elastic-job-example-lite-springboot/src/main/resources/application-dev.yml
@@ -0,0 +1,6 @@
+spring:
+  datasource:
+    url: jdbc:h2:mem:job_event_storage
+    driver-class-name: org.h2.Driver
+    username: sa
+    password:
diff --git a/elastic-job-example-lite-springboot/src/main/resources/application-prod.yml b/elastic-job-example-lite-springboot/src/main/resources/application-prod.yml
new file mode 100755
index 0000000..fdbf3e9
--- /dev/null
+++ b/elastic-job-example-lite-springboot/src/main/resources/application-prod.yml
@@ -0,0 +1,16 @@
+spring:
+  datasource:
+    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&verifyServerCertificate=false&useSSL=false&requireSSL=false
+    driver-class-name: com.mysql.jdbc.Driver
+    username: test
+    password: test
+    tomcat:
+      max-wait: 10000
+      min-idle: 0
+      initial-size: 25
+      validation-query: SELECT 1
+      test-on-borrow: false
+      test-while-idle: true
+      time-between-eviction-runs-millis: 18800
+      remove-abandoned: true
+      remove-abandoned-timeout: 180
diff --git a/elastic-job-example-lite-springboot/src/main/resources/application.yml b/elastic-job-example-lite-springboot/src/main/resources/application.yml
new file mode 100644
index 0000000..6745231
--- /dev/null
+++ b/elastic-job-example-lite-springboot/src/main/resources/application.yml
@@ -0,0 +1,17 @@
+regCenter:
+  serverList: localhost:6181
+  namespace: elastic-job-lite-springboot
+  
+simpleJob:
+  cron: 0/5 * * * * ?
+  shardingTotalCount: 3
+  shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou
+  
+dataflowJob:
+  cron: 0/5 * * * * ?
+  shardingTotalCount: 3
+  shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou
+
+spring:
+  profiles:
+    active: dev
diff --git a/elastic-job-example-lite-springboot/src/main/resources/logback.xml b/elastic-job-example-lite-springboot/src/main/resources/logback.xml
new file mode 100644
index 0000000..d373c39
--- /dev/null
+++ b/elastic-job-example-lite-springboot/src/main/resources/logback.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    
+    <property name="log.context.name" value="elastic-job-example-lite" />
+    <property name="log.charset" value="UTF-8" />
+    <property name="log.pattern" value="[%-5level] %date --%thread-- [%logger] %msg %n" />
+    
+    <contextName>${log.context.name}</contextName>
+    
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder charset="${log.charset}">
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+    
+    <root>
+        <level value="INFO" />
+        <appender-ref ref="STDOUT" />
+    </root>
+    
+    <logger name="org.apache.zookeeper" level="WARN" />
+    <logger name="org.apache.curator" level="WARN" />
+</configuration>
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..582e8c1
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,122 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>elastic-job-example</artifactId>
+    <groupId>com.dangdang</groupId>
+    <name>${project.artifactId}</name>
+    <packaging>pom</packaging>
+    <version>2.1.6-SNAPSHOT</version>
+    
+    <modules>
+        <module>elastic-job-example-jobs</module>
+        <module>elastic-job-example-embed-zk</module>
+        
+        <module>elastic-job-example-lite-java</module>
+        <module>elastic-job-example-lite-spring</module>
+        <module>elastic-job-example-lite-springboot</module>
+        
+        <module>elastic-job-example-cloud</module>
+    </modules>
+    
+    <properties>
+        <java.version>1.7</java.version>
+        <elastic-job.version>2.1.6-SNAPSHOT</elastic-job.version>
+        <curator.version>2.10.0</curator.version>
+        <springframework.version>4.3.4.RELEASE</springframework.version>
+        <slf4j.version>1.7.7</slf4j.version>
+        <logback.version>1.1.2</logback.version>
+        <commons-dbcp.version>1.4</commons-dbcp.version>
+        <h2.version>1.4.184</h2.version>
+        <mysql.version>5.1.30</mysql.version>
+        <maven-compiler-plugin.version>3.3</maven-compiler-plugin.version>
+    </properties>
+    
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <artifactId>elastic-job-common-core</artifactId>
+                <groupId>com.dangdang</groupId>
+                <version>${elastic-job.version}</version>
+            </dependency>
+            <dependency>
+                <artifactId>elastic-job-lite-core</artifactId>
+                <groupId>com.dangdang</groupId>
+                <version>${elastic-job.version}</version>
+            </dependency>
+            <dependency>
+                <artifactId>elastic-job-lite-spring</artifactId>
+                <groupId>com.dangdang</groupId>
+                <version>${elastic-job.version}</version>
+            </dependency>
+            <dependency>
+                <artifactId>elastic-job-cloud-executor</artifactId>
+                <groupId>com.dangdang</groupId>
+                <version>${elastic-job.version}</version>
+            </dependency>
+            
+            <dependency>
+                <groupId>org.apache.curator</groupId>
+                <artifactId>curator-test</artifactId>
+                <version>${curator.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-context</artifactId>
+                <version>${springframework.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-api</artifactId>
+                <version>${slf4j.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>jcl-over-slf4j</artifactId>
+                <version>${slf4j.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>log4j-over-slf4j</artifactId>
+                <version>${slf4j.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>ch.qos.logback</groupId>
+                <artifactId>logback-classic</artifactId>
+                <version>${logback.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-dbcp</groupId>
+                <artifactId>commons-dbcp</artifactId>
+                <version>${commons-dbcp.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.h2database</groupId>
+                <artifactId>h2</artifactId>
+                <version>${h2.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>mysql</groupId>
+                <artifactId>mysql-connector-java</artifactId>
+                <version>${mysql.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <configuration>
+                        <source>${java.version}</source>
+                        <target>${java.version}</target>
+                        <testSource>${java.version}</testSource>
+                        <testTarget>${java.version}</testTarget>
+                    </configuration>
+                    <version>${maven-compiler-plugin.version}</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>