diff --git a/spring-batch-intro/pom.xml b/spring-batch-intro/pom.xml
index c68608d4ae..28d48c594e 100644
--- a/spring-batch-intro/pom.xml
+++ b/spring-batch-intro/pom.xml
@@ -1,45 +1,44 @@
- 4.0.0
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
- org.baeldung
- spring-batch-intro
- 0.1-SNAPSHOT
- jar
+ org.baeldung
+ spring-batch-intro
+ 0.1-SNAPSHOT
+ jar
- spring-batch-intro
- http://maven.apache.org
+ spring-batch-intro
+ http://maven.apache.org
-
- UTF-8
- 4.0.2.RELEASE
- 3.0.5.RELEASE
- 3.8.11.2
-
+
+ UTF-8
+ 4.2.0.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}
-
-
+
+
+
+ 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
index 7e6b080851..a2f8f38e0f 100644
--- 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
@@ -1,28 +1,38 @@
package org.baeldung.spring_batch_intro;
+import javax.swing.Spring;
+
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.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
- public static void main(String[] args) {
+ public static void main(String[] args) {
+ // Spring Java config
+ AnnotationConfigApplicationContext context = new
+ AnnotationConfigApplicationContext();
+ context.register(SpringConfig.class);
+ context.register(SpringBatchConfig.class);
+ context.refresh();
- 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");
- }
- }
+ // Spring xml config
+// 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/SpringBatchConfig.java b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/SpringBatchConfig.java
new file mode 100644
index 0000000000..c892e24fd8
--- /dev/null
+++ b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/SpringBatchConfig.java
@@ -0,0 +1,92 @@
+package org.baeldung.spring_batch_intro;
+
+import java.net.MalformedURLException;
+import java.text.ParseException;
+
+import org.baeldung.spring_batch_intro.model.Transaction;
+import org.baeldung.spring_batch_intro.service.CustomItemProcessor;
+import org.baeldung.spring_batch_intro.service.RecordFieldSetMapper;
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.Step;
+import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
+import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
+import org.springframework.batch.item.ItemProcessor;
+import org.springframework.batch.item.ItemReader;
+import org.springframework.batch.item.ItemWriter;
+import org.springframework.batch.item.UnexpectedInputException;
+import org.springframework.batch.item.file.FlatFileItemReader;
+import org.springframework.batch.item.file.mapping.DefaultLineMapper;
+import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
+import org.springframework.batch.item.xml.StaxEventItemWriter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.Resource;
+import org.springframework.oxm.Marshaller;
+import org.springframework.oxm.jaxb.Jaxb2Marshaller;
+
+public class SpringBatchConfig {
+ @Autowired
+ private JobBuilderFactory jobs;
+
+ @Autowired
+ private StepBuilderFactory steps;
+
+ @Value("input/record.csv")
+ private Resource inputCsv;
+
+ @Value("file:xml/output.xml")
+ private Resource outputXml;
+
+ @Bean
+ public ItemReader itemReader()
+ throws UnexpectedInputException, ParseException, Exception {
+ FlatFileItemReader reader = new FlatFileItemReader();
+ DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
+ String[] tokens = { "username", "userid", "transactiondate", "amount" };
+ tokenizer.setNames(tokens);
+ reader.setResource(inputCsv);
+ DefaultLineMapper lineMapper = new DefaultLineMapper();
+ lineMapper.setLineTokenizer(tokenizer);
+ lineMapper.setFieldSetMapper(new RecordFieldSetMapper());
+ reader.setLineMapper(lineMapper);
+ return reader;
+ }
+
+ @Bean
+ public ItemProcessor itemProcessor() {
+ return new CustomItemProcessor();
+ }
+
+ @Bean
+ public ItemWriter itemWriter(Marshaller marshaller)
+ throws MalformedURLException {
+ StaxEventItemWriter itemWriter = new StaxEventItemWriter();
+ itemWriter.setMarshaller(marshaller);
+ itemWriter.setRootTagName("transactionRecord");
+ itemWriter.setResource(outputXml);
+ return itemWriter;
+ }
+
+ @Bean
+ public Marshaller marshaller() {
+ Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
+ marshaller.setClassesToBeBound(new Class[] { Transaction.class });
+ return marshaller;
+ }
+
+ @Bean
+ protected Step step1(ItemReader reader,
+ ItemProcessor processor,
+ ItemWriter writer) {
+ return steps.get("step1"). chunk(10)
+ .reader(reader).processor(processor).writer(writer).build();
+ }
+
+ @Bean(name = "firstBatchJob")
+ public Job job(@Qualifier("step1") Step step1) {
+ return jobs.get("firstBatchJob").start(step1).build();
+ }
+
+}
diff --git a/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/SpringConfig.java b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/SpringConfig.java
new file mode 100644
index 0000000000..79676fbe4e
--- /dev/null
+++ b/spring-batch-intro/src/main/java/org/baeldung/spring_batch_intro/SpringConfig.java
@@ -0,0 +1,75 @@
+package org.baeldung.spring_batch_intro;
+
+import java.net.MalformedURLException;
+
+import javax.sql.DataSource;
+
+import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
+import org.springframework.batch.core.launch.JobLauncher;
+import org.springframework.batch.core.launch.support.SimpleJobLauncher;
+import org.springframework.batch.core.repository.JobRepository;
+import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean;
+import org.springframework.batch.support.transaction.ResourcelessTransactionManager;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.Resource;
+import org.springframework.jdbc.datasource.DriverManagerDataSource;
+import org.springframework.jdbc.datasource.init.DataSourceInitializer;
+import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
+import org.springframework.transaction.PlatformTransactionManager;
+
+@Configuration
+@EnableBatchProcessing
+public class SpringConfig {
+
+ @Value("org/springframework/batch/core/schema-drop-sqlite.sql")
+ private Resource dropReopsitoryTables;
+
+ @Value("org/springframework/batch/core/schema-sqlite.sql")
+ private Resource dataReopsitorySchema;
+
+ @Bean
+ public DataSource dataSource() {
+ DriverManagerDataSource dataSource = new DriverManagerDataSource();
+ dataSource.setDriverClassName("org.sqlite.JDBC");
+ dataSource.setUrl("jdbc:sqlite:repository.sqlite");
+ return dataSource;
+ }
+
+ @Bean
+ public DataSourceInitializer dataSourceInitializer(DataSource dataSource)
+ throws MalformedURLException {
+ ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
+
+ databasePopulator.addScript(dropReopsitoryTables);
+ databasePopulator.addScript(dataReopsitorySchema);
+ databasePopulator.setIgnoreFailedDrops(true);
+
+ DataSourceInitializer initializer = new DataSourceInitializer();
+ initializer.setDataSource(dataSource);
+ initializer.setDatabasePopulator(databasePopulator);
+
+ return initializer;
+ }
+
+ private JobRepository getJobRepository() throws Exception {
+ JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
+ factory.setDataSource(dataSource());
+ factory.setTransactionManager(getTransactionManager());
+ factory.afterPropertiesSet();
+ return (JobRepository) factory.getObject();
+ }
+
+ private PlatformTransactionManager getTransactionManager() {
+ return new ResourcelessTransactionManager();
+ }
+
+ public JobLauncher getJobLauncher() throws Exception {
+ SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
+ jobLauncher.setJobRepository(getJobRepository());
+ jobLauncher.afterPropertiesSet();
+ return jobLauncher;
+ }
+
+}
\ 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
index 815af78cd4..0108dcf501 100644
--- 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
@@ -7,48 +7,48 @@ 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;
+ private String username;
+ private int userId;
+ private Date transactionDate;
+ private double amount;
- public String getUsername() {
- return username;
- }
+ public String getUsername() {
+ return username;
+ }
- public void setUsername(String username) {
- this.username = username;
- }
+ public void setUsername(String username) {
+ this.username = username;
+ }
- public int getUserId() {
- return userId;
- }
+ public int getUserId() {
+ return userId;
+ }
- public void setUserId(int userId) {
- this.userId = userId;
- }
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
- public Date getTransactionDate() {
- return transactionDate;
- }
+ public Date getTransactionDate() {
+ return transactionDate;
+ }
- public void setTransactionDate(Date transactionDate) {
- this.transactionDate = transactionDate;
- }
+ public void setTransactionDate(Date transactionDate) {
+ this.transactionDate = transactionDate;
+ }
- public double getAmount() {
- return amount;
- }
+ public double getAmount() {
+ return amount;
+ }
- public void setAmount(double amount) {
- this.amount = amount;
- }
+ public void setAmount(double amount) {
+ this.amount = amount;
+ }
- @Override
- public String toString() {
- return "Transaction [username=" + username + ", userId=" + userId
- + ", transactionDate=" + transactionDate + ", 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
index be1127c5e7..487dbb5efb 100644
--- 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
@@ -1,14 +1,13 @@
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 class CustomItemProcessor implements
+ ItemProcessor {
- public Transaction process(Transaction item) throws Exception {
-
- System.out.println("Processing..." + item);
- return item;
- }
+ 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
index 2b8f897e2a..0955b57c76 100644
--- 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
@@ -10,24 +10,24 @@ 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();
- }
+ public Transaction mapFieldSet(FieldSet fieldSet) throws BindException {
- return transaction;
+ 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/spring-batch-intro.xml b/spring-batch-intro/src/main/resources/spring-batch-intro.xml
index 06918d8754..6daa0358d9 100644
--- a/spring-batch-intro/src/main/resources/spring-batch-intro.xml
+++ b/spring-batch-intro/src/main/resources/spring-batch-intro.xml
@@ -1,61 +1,66 @@
-
-
-
-
-
+
-
+
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
- org.baeldung.spring_batch_intro.model.Transaction
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
index d286662002..dea261c5e6 100644
--- a/spring-batch-intro/src/main/resources/spring.xml
+++ b/spring-batch-intro/src/main/resources/spring.xml
@@ -1,44 +1,45 @@
+ http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd">
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
-
-
+
+
+
\ No newline at end of file