From 868e6c3f7f592bf38d04ae994438d379ea0177bb Mon Sep 17 00:00:00 2001 From: Kunwar Date: Sat, 27 Jun 2020 14:30:41 +0530 Subject: [PATCH] Spring Batch Application --- Spring-Boot-Batch/springbootbatch/pom.xml | 10 ++++ .../SpringBootBatchBasicApplication.java | 3 + .../config/SpringBatchConfig.java | 55 ++++++++++++++++--- .../controller/SpringBatchJobController.java | 3 + .../listener/SPChunkListener.java | 30 ++++++++++ .../listener/SPItemProcessorListener.java | 29 ++++++++++ .../listener/SPItemReadListener.java | 28 ++++++++++ .../listener/SPItemWriteListener.java | 28 ++++++++++ .../listener/SPJobExecutionListener.java | 27 +++++++++ .../listener/SPSkipListener.java | 28 ++++++++++ .../listener/SPStepListener.java | 27 +++++++++ .../SpringBatchJobCompletionListener.java | 13 ++++- .../springbootbatch/mapper/UserRowMapper.java | 19 +++++++ .../springbootbatch/model/Employee.java | 13 +++++ .../springbootbatch/model/User.java | 15 +++++ .../SpringBatchBasicRepository.java | 52 ++++++++++++++++++ .../step/EmployeeItemProcessor.java | 22 ++++++++ .../springbootbatch/step/SBProcessor.java | 3 + .../springbootbatch/step/SBReader.java | 3 + .../springbootbatch/step/SBWriter.java | 3 + .../src/main/resources/csv/employees.csv | 4 ++ .../SpringBootBatchBasicApplicationTests.java | 3 + 22 files changed, 408 insertions(+), 10 deletions(-) create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPChunkListener.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemProcessorListener.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemReadListener.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemWriteListener.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPJobExecutionListener.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPSkipListener.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPStepListener.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/mapper/UserRowMapper.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/model/Employee.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/model/User.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/repository/SpringBatchBasicRepository.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/EmployeeItemProcessor.java create mode 100644 Spring-Boot-Batch/springbootbatch/src/main/resources/csv/employees.csv diff --git a/Spring-Boot-Batch/springbootbatch/pom.xml b/Spring-Boot-Batch/springbootbatch/pom.xml index 994ca8b..3e04996 100644 --- a/Spring-Boot-Batch/springbootbatch/pom.xml +++ b/Spring-Boot-Batch/springbootbatch/pom.xml @@ -69,6 +69,16 @@ spring-batch-test test + + org.springframework.batch + spring-batch-core + 4.2.2.RELEASE + test + + + org.springframework.batch + spring-batch-core + diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/SpringBootBatchBasicApplication.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/SpringBootBatchBasicApplication.java index 9fd2cc7..5035f6e 100644 --- a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/SpringBootBatchBasicApplication.java +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/SpringBootBatchBasicApplication.java @@ -4,6 +4,9 @@ import org.springframework.batch.core.configuration.annotation.EnableBatchProces import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +/** + * @Author - Kunwar Vikas + */ @SpringBootApplication @EnableBatchProcessing public class SpringBootBatchBasicApplication { diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/config/SpringBatchConfig.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/config/SpringBatchConfig.java index f84080f..c479f57 100644 --- a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/config/SpringBatchConfig.java +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/config/SpringBatchConfig.java @@ -1,11 +1,20 @@ package com.javadevjournal.springbootbatch.config; +import com.javadevjournal.springbootbatch.listener.SPJobExecutionListener; +import com.javadevjournal.springbootbatch.listener.SPStepListener; +import com.javadevjournal.springbootbatch.model.Employee; +import com.javadevjournal.springbootbatch.step.EmployeeItemProcessor; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecutionListener; 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.core.launch.support.RunIdIncrementer; +import org.springframework.batch.item.file.FlatFileItemReader; +import org.springframework.batch.item.file.FlatFileItemWriter; +import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; +import org.springframework.batch.item.file.builder.FlatFileItemWriterBuilder; +import org.springframework.batch.item.file.transform.PassThroughLineAggregator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -14,7 +23,12 @@ import com.javadevjournal.springbootbatch.listener.SpringBatchJobCompletionListe import com.javadevjournal.springbootbatch.step.SBProcessor; import com.javadevjournal.springbootbatch.step.SBReader; import com.javadevjournal.springbootbatch.step.SBWriter; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.FileSystemResource; +/** + * @Author - Kunwar Vikas + */ @Configuration public class SpringBatchConfig { @@ -27,20 +41,45 @@ public class SpringBatchConfig { @Bean public Job processJob() { return jobBuilderFactory.get("javadevjournaljob") - .incrementer(new RunIdIncrementer()).listener(listener()) + .incrementer(new RunIdIncrementer()) + .listener(new SPJobExecutionListener()) .flow(orderStep1()).end().build(); } - @Bean - public Step orderStep1() { - return stepBuilderFactory.get("step1"). chunk(1) - .reader(new SBReader()).processor(new SBProcessor()) - .writer(new SBWriter()).build(); - } + + @Bean + public Step orderStep1() { + return stepBuilderFactory.get("step1") + .listener(new SPStepListener()) + .chunk(10).reader(reader()) + .processor(processor()).writer(writer()).build(); + } + + @Bean + public FlatFileItemReader reader() { + return new FlatFileItemReaderBuilder() + .name("employeeItemReader") + .resource(new ClassPathResource("csv/employees.csv")) + .delimited().names(new String[] {"firstName", "lastName","department"}) + .targetType(Employee.class).build(); + } + + @Bean + public EmployeeItemProcessor processor() { + return new EmployeeItemProcessor(); + } + + @Bean + public FlatFileItemWriter writer() { + return new FlatFileItemWriterBuilder() + .name("greetingItemWriter") + .resource(new FileSystemResource( + "target/output.txt")) + .lineAggregator(new PassThroughLineAggregator<>()).build(); + } @Bean public JobExecutionListener listener() { return new SpringBatchJobCompletionListener(); } - } diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/controller/SpringBatchJobController.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/controller/SpringBatchJobController.java index 94fc124..06ff810 100644 --- a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/controller/SpringBatchJobController.java +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/controller/SpringBatchJobController.java @@ -9,6 +9,9 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +/** + * @Author - Kunwar Vikas + */ @RestController public class SpringBatchJobController { diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPChunkListener.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPChunkListener.java new file mode 100644 index 0000000..89b8a95 --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPChunkListener.java @@ -0,0 +1,30 @@ +package com.javadevjournal.springbootbatch.listener; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.ChunkListener; +import org.springframework.batch.core.StepListener; +import org.springframework.batch.core.scope.context.ChunkContext; + +/** + * @Author - Kunwar Vikas + */ +public class SPChunkListener implements ChunkListener { + + Logger logger = LoggerFactory.getLogger(SPChunkListener.class); + + @Override + public void beforeChunk(ChunkContext chunkContext) { + logger.info("beforeChunk"); + } + + @Override + public void afterChunk(ChunkContext chunkContext) { + logger.info("afterChunk"); + } + + @Override + public void afterChunkError(ChunkContext chunkContext) { + logger.info("afterChunkError"); + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemProcessorListener.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemProcessorListener.java new file mode 100644 index 0000000..dcd3769 --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemProcessorListener.java @@ -0,0 +1,29 @@ +package com.javadevjournal.springbootbatch.listener; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.ItemProcessListener; + + +/** + * @Author - Kunwar Vikas + */ +public class SPItemProcessorListener implements ItemProcessListener { + + Logger logger = LoggerFactory.getLogger(SPItemProcessorListener.class); + + @Override + public void beforeProcess(String item) { + logger.info("beforeProcess"); + } + + @Override + public void afterProcess(String item, Number result) { + logger.info("afterProcess"); + } + + @Override + public void onProcessError(String item, Exception e) { + logger.info(" onProcessError"); + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemReadListener.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemReadListener.java new file mode 100644 index 0000000..027fe55 --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemReadListener.java @@ -0,0 +1,28 @@ +package com.javadevjournal.springbootbatch.listener; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.ItemReadListener; + +/** + * @Author - Kunwar Vikas + */ +public class SPItemReadListener implements ItemReadListener { + + Logger logger = LoggerFactory.getLogger(SPItemReadListener.class); + + @Override + public void beforeRead() { + logger.info("Before reading an item"); + } + + @Override + public void afterRead(String item) { + logger.info("After reading an item: "+ item.toString()); + } + + @Override + public void onReadError(Exception ex) { + logger.error("Error occurred while reading an item!"); + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemWriteListener.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemWriteListener.java new file mode 100644 index 0000000..48e46e5 --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPItemWriteListener.java @@ -0,0 +1,28 @@ +package com.javadevjournal.springbootbatch.listener; + +import com.javadevjournal.springbootbatch.model.User; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.ItemWriteListener; +import org.springframework.jdbc.core.JdbcTemplate; + +import javax.sql.DataSource; +import java.util.List; + +/** + * @Author - Kunwar Vikas + */ +public class SPItemWriteListener implements ItemWriteListener { + Logger logger = LoggerFactory.getLogger(SPItemWriteListener.class); + + public void beforeWrite(List items) { + logger.info("before write"); + } + + public void onWriteError(Exception exception, List items) { + logger.info("Error occurred when writing items!"); + } + public void afterWrite(List items) { + logger.info("after write"); + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPJobExecutionListener.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPJobExecutionListener.java new file mode 100644 index 0000000..8e07a88 --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPJobExecutionListener.java @@ -0,0 +1,27 @@ +package com.javadevjournal.springbootbatch.listener; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.BatchStatus; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobExecutionListener; + +/** + * @Author - Kunwar Vikas + */ +public class SPJobExecutionListener implements JobExecutionListener { + + Logger logger = LoggerFactory.getLogger(SPJobExecutionListener.class); + + public void beforeJob(JobExecution jobExecution) { + logger.info("BEFORE BATCH JOB STARTS"); + } + + public void afterJob(JobExecution jobExecution) { + if (jobExecution.getStatus() == BatchStatus.COMPLETED) { + logger.info("BATCH JOB COMPLETED SUCCESSFULLY"); + }else if(jobExecution.getStatus() == BatchStatus.FAILED){ + logger.info("BATCH JOB FAILED"); + } + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPSkipListener.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPSkipListener.java new file mode 100644 index 0000000..8548b02 --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPSkipListener.java @@ -0,0 +1,28 @@ +package com.javadevjournal.springbootbatch.listener; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.SkipListener; + +/** + * @Author - Kunwar Vikas + */ +public class SPSkipListener implements SkipListener { + + Logger logger = LoggerFactory.getLogger(SPSkipListener.class); + + @Override + public void onSkipInRead(Throwable t) { + logger.info("onSkipInRead"); + } + + @Override + public void onSkipInWrite(Number item, Throwable t) { + logger.info("onSkipInWrite"); + } + + @Override + public void onSkipInProcess(String item, Throwable t) { + logger.info("onWriteError"); + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPStepListener.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPStepListener.java new file mode 100644 index 0000000..65dbbd0 --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SPStepListener.java @@ -0,0 +1,27 @@ +package com.javadevjournal.springbootbatch.listener; + +import com.javadevjournal.springbootbatch.step.SBWriter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.ExitStatus; +import org.springframework.batch.core.StepExecution; +import org.springframework.batch.core.StepExecutionListener; + +/** + * @Author - Kunwar Vikas + */ +public class SPStepListener implements StepExecutionListener { + + Logger logger = LoggerFactory.getLogger(SPStepListener.class); + + @Override + public void beforeStep(StepExecution stepExecution) { + logger.info("SPStepListener - CALLED BEFORE STEP."); + } + + @Override + public ExitStatus afterStep(StepExecution stepExecution) { + logger.info("SPStepListener - CALLED AFTER STEP."); + return ExitStatus.COMPLETED; + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SpringBatchJobCompletionListener.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SpringBatchJobCompletionListener.java index 7756961..64bf669 100644 --- a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SpringBatchJobCompletionListener.java +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/listener/SpringBatchJobCompletionListener.java @@ -1,19 +1,28 @@ package com.javadevjournal.springbootbatch.listener; -import com.javadevjournal.springbootbatch.step.SBWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.listener.JobExecutionListenerSupport; +/** + * @Author - Kunwar Vikas + */ public class SpringBatchJobCompletionListener extends JobExecutionListenerSupport { Logger logger = LoggerFactory.getLogger(SpringBatchJobCompletionListener.class); + @Override + public void beforeJob(JobExecution jobExecution) { + logger.info("SpringBatchJobCompletionListener - BEFORE BATCH JOB STARTS"); + } + @Override public void afterJob(JobExecution jobExecution) { if (jobExecution.getStatus() == BatchStatus.COMPLETED) { - logger.info("BATCH JOB COMPLETED SUCCESSFULLY"); + logger.info("SpringBatchJobCompletionListener - BATCH JOB COMPLETED SUCCESSFULLY"); + }else if(jobExecution.getStatus() == BatchStatus.FAILED){ + logger.info("SpringBatchJobCompletionListener - BATCH JOB FAILED"); } } diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/mapper/UserRowMapper.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/mapper/UserRowMapper.java new file mode 100644 index 0000000..9f0296e --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/mapper/UserRowMapper.java @@ -0,0 +1,19 @@ +package com.javadevjournal.springbootbatch.mapper; + +import com.javadevjournal.springbootbatch.model.User; +import org.springframework.jdbc.core.RowMapper; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class UserRowMapper implements RowMapper { + public User mapRow(ResultSet rs, int rowNum) throws SQLException { + User user = new User(); + user.setFirstName(rs.getString("firstName")); + user.setMiddleName(rs.getString("middleName")); + user.setLastName(rs.getString("lastName")); + user.setCity(rs.getString("city")); + user.setId(rs.getInt("id")); + return user; + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/model/Employee.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/model/Employee.java new file mode 100644 index 0000000..7cefbeb --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/model/Employee.java @@ -0,0 +1,13 @@ +package com.javadevjournal.springbootbatch.model; + +import lombok.Data; + +@Data +public class Employee { + private String firstName; + private String lastName; + private String department; + + public Employee() { + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/model/User.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/model/User.java new file mode 100644 index 0000000..07dab95 --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/model/User.java @@ -0,0 +1,15 @@ +package com.javadevjournal.springbootbatch.model; + +import lombok.Data; + +/** + * Author Kunwar Vikas + */ +@Data +public class User { + private int id; + private String firstName; + private String middleName; + private String lastName; + private String city; +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/repository/SpringBatchBasicRepository.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/repository/SpringBatchBasicRepository.java new file mode 100644 index 0000000..5fd76ed --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/repository/SpringBatchBasicRepository.java @@ -0,0 +1,52 @@ +package com.javadevjournal.springbootbatch.repository; + +import org.springframework.batch.core.configuration.annotation.BatchConfigurer; +import org.springframework.batch.core.explore.JobExplorer; +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.beans.factory.annotation.Autowired; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; + +import javax.sql.DataSource; + +/** + * currently not in use, we are using H2 DB + * @Author - Kunwar Vikas + */ +public class SpringBatchBasicRepository implements BatchConfigurer { + + @Autowired + private DataSource dataSource; + + @Autowired + private PlatformTransactionManager transactionManager; + + @Override + public JobRepository getJobRepository() throws Exception { + JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); + factory.setTablePrefix("SCHEMA_OWNER.BATCH_"); + factory.setMaxVarCharLength(1200); + return factory.getObject(); + } + + @Override + public PlatformTransactionManager getTransactionManager() throws Exception { + return new DataSourceTransactionManager(); + } + + @Override + public JobLauncher getJobLauncher() throws Exception { + SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); + jobLauncher.setJobRepository(getJobRepository()); + jobLauncher.afterPropertiesSet(); + return jobLauncher; + } + + @Override + public JobExplorer getJobExplorer() throws Exception { + return null; + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/EmployeeItemProcessor.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/EmployeeItemProcessor.java new file mode 100644 index 0000000..d3f26f3 --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/EmployeeItemProcessor.java @@ -0,0 +1,22 @@ +package com.javadevjournal.springbootbatch.step; + +import com.javadevjournal.springbootbatch.model.Employee; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.item.ItemProcessor; + +public class EmployeeItemProcessor + implements ItemProcessor { + + private static final Logger LOGGER = + LoggerFactory.getLogger(EmployeeItemProcessor.class); + + @Override + public String process(Employee employee) throws Exception { + String greeting = "Hello " + employee.getFirstName() + " " + + employee.getLastName() + " from " + employee.getDepartment()+"!"; + + LOGGER.info("converting '{}' into '{}'", employee, greeting); + return greeting; + } +} diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBProcessor.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBProcessor.java index e5be177..67b087c 100644 --- a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBProcessor.java +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBProcessor.java @@ -2,6 +2,9 @@ package com.javadevjournal.springbootbatch.step; import org.springframework.batch.item.ItemProcessor; +/** + * @Author - Kunwar Vikas + */ public class SBProcessor implements ItemProcessor { @Override diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBReader.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBReader.java index 6da043c..5fe8e45 100644 --- a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBReader.java +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBReader.java @@ -5,6 +5,9 @@ import org.springframework.batch.item.NonTransientResourceException; import org.springframework.batch.item.ParseException; import org.springframework.batch.item.UnexpectedInputException; +/** + * @Author - Kunwar Vikas + */ public class SBReader implements ItemReader { private String[] messages = { "javadevjournal.com", diff --git a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBWriter.java b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBWriter.java index 4c18bd9..402a8ab 100644 --- a/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBWriter.java +++ b/Spring-Boot-Batch/springbootbatch/src/main/java/com/javadevjournal/springbootbatch/step/SBWriter.java @@ -6,6 +6,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.batch.item.ItemWriter; +/** + * @Author - Kunwar Vikas + */ public class SBWriter implements ItemWriter { Logger logger = LoggerFactory.getLogger(SBWriter.class); @Override diff --git a/Spring-Boot-Batch/springbootbatch/src/main/resources/csv/employees.csv b/Spring-Boot-Batch/springbootbatch/src/main/resources/csv/employees.csv new file mode 100644 index 0000000..2964a0c --- /dev/null +++ b/Spring-Boot-Batch/springbootbatch/src/main/resources/csv/employees.csv @@ -0,0 +1,4 @@ +Janardan, Srivastava, FCI +Chandra, Srivastava, Powergrid +Vijay, Verma, CDA +Savita, Srivastava, NTPC \ No newline at end of file diff --git a/Spring-Boot-Batch/springbootbatch/src/test/java/com/javadevjournal/springbootbatch/SpringBootBatchBasicApplicationTests.java b/Spring-Boot-Batch/springbootbatch/src/test/java/com/javadevjournal/springbootbatch/SpringBootBatchBasicApplicationTests.java index ee3217d..ba9d61c 100644 --- a/Spring-Boot-Batch/springbootbatch/src/test/java/com/javadevjournal/springbootbatch/SpringBootBatchBasicApplicationTests.java +++ b/Spring-Boot-Batch/springbootbatch/src/test/java/com/javadevjournal/springbootbatch/SpringBootBatchBasicApplicationTests.java @@ -3,6 +3,9 @@ package com.javadevjournal.springbootbatch; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +/** + * @Author - Kunwar Vikas + */ @SpringBootTest class SpringBootBatchBasicApplicationTests {