diff --git a/spring-batch-intro/.classpath b/spring-batch-intro/.classpath
new file mode 100644
index 0000000000..395dbde027
--- /dev/null
+++ b/spring-batch-intro/.classpath
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-batch-intro/.project b/spring-batch-intro/.project
new file mode 100644
index 0000000000..032f8a9541
--- /dev/null
+++ b/spring-batch-intro/.project
@@ -0,0 +1,23 @@
+
+
+ spring-batch-intro
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/spring-batch-intro/pom.xml b/spring-batch-intro/pom.xml
new file mode 100644
index 0000000000..c68608d4ae
--- /dev/null
+++ b/spring-batch-intro/pom.xml
@@ -0,0 +1,45 @@
+
+ 4.0.0
+
+ org.baeldung
+ spring-batch-intro
+ 0.1-SNAPSHOT
+ jar
+
+ spring-batch-intro
+ http://maven.apache.org
+
+
+ UTF-8
+ 4.0.2.RELEASE
+ 3.0.5.RELEASE
+ 3.8.11.2
+
+
+
+
+
+ org.xerial
+ sqlite-jdbc
+ ${sqlite.version}
+
+
+ org.springframework
+ spring-oxm
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+
+ org.springframework.batch
+ spring-batch-core
+ ${spring.batch.version}
+
+
+
+
diff --git a/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/App.java b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/App.java
new file mode 100644
index 0000000000..7e6b080851
--- /dev/null
+++ b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/App.java
@@ -0,0 +1,28 @@
+package org.baeldung.spring_batch_intro;
+
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.JobExecution;
+import org.springframework.batch.core.JobParameters;
+import org.springframework.batch.core.launch.JobLauncher;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class App {
+ public static void main(String[] args) {
+
+ ApplicationContext context = new ClassPathXmlApplicationContext(
+ "/spring-batch-intro.xml");
+
+ JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
+ Job job = (Job) context.getBean("firstBatchJob");
+ System.out.println("Starting the batch job");
+ try {
+ JobExecution execution = jobLauncher.run(job, new JobParameters());
+ System.out.println("Job Status : " + execution.getStatus());
+ System.out.println("Job completed");
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("Job failed");
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/model/Transaction.java b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/model/Transaction.java
new file mode 100644
index 0000000000..815af78cd4
--- /dev/null
+++ b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/model/Transaction.java
@@ -0,0 +1,54 @@
+package org.baeldung.spring_batch_intro.model;
+
+import java.util.Date;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@SuppressWarnings("restriction")
+@XmlRootElement(name = "transactionRecord")
+public class Transaction {
+ private String username;
+ private int userId;
+ private Date transactionDate;
+ private double amount;
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public int getUserId() {
+ return userId;
+ }
+
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+
+ public Date getTransactionDate() {
+ return transactionDate;
+ }
+
+ public void setTransactionDate(Date transactionDate) {
+ this.transactionDate = transactionDate;
+ }
+
+ public double getAmount() {
+ return amount;
+ }
+
+ public void setAmount(double amount) {
+ this.amount = amount;
+ }
+
+ @Override
+ public String toString() {
+ return "Transaction [username=" + username + ", userId=" + userId
+ + ", transactionDate=" + transactionDate + ", amount=" + amount
+ + "]";
+ }
+
+}
diff --git a/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/service/CustomItemProcessor.java b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/service/CustomItemProcessor.java
new file mode 100644
index 0000000000..be1127c5e7
--- /dev/null
+++ b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/service/CustomItemProcessor.java
@@ -0,0 +1,14 @@
+package org.baeldung.spring_batch_intro.service;
+
+
+import org.baeldung.spring_batch_intro.model.Transaction;
+import org.springframework.batch.item.ItemProcessor;
+
+public class CustomItemProcessor implements ItemProcessor {
+
+ public Transaction process(Transaction item) throws Exception {
+
+ System.out.println("Processing..." + item);
+ return item;
+ }
+}
\ No newline at end of file
diff --git a/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/service/RecordFieldSetMapper.java b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/service/RecordFieldSetMapper.java
new file mode 100644
index 0000000000..2b8f897e2a
--- /dev/null
+++ b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/service/RecordFieldSetMapper.java
@@ -0,0 +1,33 @@
+package org.baeldung.spring_batch_intro.service;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import org.baeldung.spring_batch_intro.model.Transaction;
+import org.springframework.batch.item.file.mapping.FieldSetMapper;
+import org.springframework.batch.item.file.transform.FieldSet;
+import org.springframework.validation.BindException;
+
+public class RecordFieldSetMapper implements FieldSetMapper {
+
+ public Transaction mapFieldSet(FieldSet fieldSet) throws BindException {
+
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+ Transaction transaction = new Transaction();
+
+ transaction.setUsername(fieldSet.readString("username"));
+ transaction.setUserId(fieldSet.readInt(1));
+ transaction.setAmount(fieldSet.readDouble(3));
+ //Converting the date
+ String dateString = fieldSet.readString(2);
+ try {
+ transaction.setTransactionDate(dateFormat.parse(dateString));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ return transaction;
+
+ }
+
+}
diff --git a/spring-batch-intro/src/main/resources/input/record.csv b/spring-batch-intro/src/main/resources/input/record.csv
new file mode 100644
index 0000000000..3a1437eed5
--- /dev/null
+++ b/spring-batch-intro/src/main/resources/input/record.csv
@@ -0,0 +1,3 @@
+devendra, 1234, 31/10/2015, 10000
+john, 2134, 3/12/2015, 12321
+robin, 2134, 2/02/2015, 23411
\ No newline at end of file
diff --git a/spring-batch-intro/src/main/resources/spring-batch-intro.xml b/spring-batch-intro/src/main/resources/spring-batch-intro.xml
new file mode 100644
index 0000000000..06918d8754
--- /dev/null
+++ b/spring-batch-intro/src/main/resources/spring-batch-intro.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.baeldung.spring_batch_intro.model.Transaction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-batch-intro/src/main/resources/spring.xml b/spring-batch-intro/src/main/resources/spring.xml
new file mode 100644
index 0000000000..d286662002
--- /dev/null
+++ b/spring-batch-intro/src/main/resources/spring.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-batch-intro/xml/output.xml b/spring-batch-intro/xml/output.xml
new file mode 100644
index 0000000000..9e57fa38f2
--- /dev/null
+++ b/spring-batch-intro/xml/output.xml
@@ -0,0 +1 @@
+10000.02015-10-31T00:00:00+08:001234devendra12321.02015-12-03T00:00:00+08:002134john23411.02015-02-02T00:00:00+08:002134robin
\ No newline at end of file