diff --git a/demo-spring-batch/.factorypath b/demo-spring-batch/.factorypath new file mode 100644 index 0000000..fe01721 --- /dev/null +++ b/demo-spring-batch/.factorypath @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo-spring-batch/pom.xml b/demo-spring-batch/pom.xml index ce92227..b4e6658 100644 --- a/demo-spring-batch/pom.xml +++ b/demo-spring-batch/pom.xml @@ -1,12 +1,13 @@ - 4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE - + com.example demo-spring-batch @@ -39,6 +40,14 @@ spring-batch-test test + + + + org.projectlombok + lombok + provided + + diff --git a/demo-spring-batch/src/main/java/com/example/demospringbatch/BatchConfiguration.java b/demo-spring-batch/src/main/java/com/example/demospringbatch/BatchConfiguration.java index 182cb50..db8d895 100644 --- a/demo-spring-batch/src/main/java/com/example/demospringbatch/BatchConfiguration.java +++ b/demo-spring-batch/src/main/java/com/example/demospringbatch/BatchConfiguration.java @@ -20,63 +20,59 @@ import org.springframework.core.io.ClassPathResource; import com.example.demospringbatch.listener.JobListener; -import com.example.demospringbatch.model.Persona; -import com.example.demospringbatch.processor.PersonaItemProcessor; +import com.example.demospringbatch.model.Person; +import com.example.demospringbatch.processor.PersonItemProcessor; @Configuration @EnableBatchProcessing public class BatchConfiguration { - + @Autowired public JobBuilderFactory jobBuilderFactory; - + @Autowired public StepBuilderFactory stepBuilderFactory; - + @Bean - public FlatFileItemReader reader(){ - return new FlatFileItemReaderBuilder() - .name("personaItemReader") - .resource(new ClassPathResource("sample-data.csv")) - .delimited() - .names(new String[] {"primerNombre", "segundoNombre", "telefono"}) - .fieldSetMapper(new BeanWrapperFieldSetMapper() {{ - setTargetType(Persona.class); - }}) - .build(); + public FlatFileItemReader reader() { + return new FlatFileItemReaderBuilder().name("personItemReader") + .resource(new ClassPathResource("sample-data.csv")).delimited() + .names(new String[] { "firstName", "secondName", "phone" }) + .fieldSetMapper(new BeanWrapperFieldSetMapper() { + { + setTargetType(Person.class); + } + }).build(); } - + @Bean - public PersonaItemProcessor processor() { - return new PersonaItemProcessor(); + public PersonItemProcessor processor() { + return new PersonItemProcessor(); } - + @Bean - public JdbcBatchItemWriter writer(DataSource dataSource){ - return new JdbcBatchItemWriterBuilder() + public JdbcBatchItemWriter writer(DataSource dataSource) { + return new JdbcBatchItemWriterBuilder() .itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>()) - .sql("INSERT INTO persona (primer_nombre, segundo_nombre, telefono) VALUES (:primerNombre, :segundoNombre, :telefono)") - .dataSource(dataSource) - .build(); + .sql("INSERT INTO person (first_name, second_name, phone) VALUES (:firstName, :secondName, :phone)") + .dataSource(dataSource).build(); } - + @Bean public Job importPersonaJob(JobListener listener, Step step1) { - return jobBuilderFactory.get("importPersonaJob") + return jobBuilderFactory.get("importPersonJob") .incrementer(new RunIdIncrementer()) .listener(listener) - .flow(step1) - .end() - .build(); + .flow(step1).end().build(); } - + @Bean - public Step step1(JdbcBatchItemWriter writer) { + public Step step1(JdbcBatchItemWriter writer) { return stepBuilderFactory.get("step1") - . chunk(10) + .chunk(10) .reader(reader()) - .writer(writer) - .build(); + .processor(processor()) + .writer(writer).build(); } } diff --git a/demo-spring-batch/src/main/java/com/example/demospringbatch/listener/JobListener.java b/demo-spring-batch/src/main/java/com/example/demospringbatch/listener/JobListener.java index 9924455..8d5d534 100644 --- a/demo-spring-batch/src/main/java/com/example/demospringbatch/listener/JobListener.java +++ b/demo-spring-batch/src/main/java/com/example/demospringbatch/listener/JobListener.java @@ -1,7 +1,5 @@ package com.example.demospringbatch.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.listener.JobExecutionListenerSupport; @@ -9,12 +7,14 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; -import com.example.demospringbatch.model.Persona; +import com.example.demospringbatch.model.Person; +import lombok.extern.log4j.Log4j2; + +@Log4j2 @Component public class JobListener extends JobExecutionListenerSupport { - private static final Logger LOG = LoggerFactory.getLogger(JobListener.class); private JdbcTemplate jdbcTemplate; @@ -27,12 +27,14 @@ public JobListener(JdbcTemplate jdbcTemplate) { @Override public void afterJob(JobExecution jobExecution) { if (jobExecution.getStatus() == BatchStatus.COMPLETED) { - LOG.info("FINALIZĂ“ EL JOB!! Verifica los resultados:"); + log.info("===========================================================\n"); + log.info("The Job is over!! Check the results converted to uppercase:\n"); + log.info("===========================================================\n"); jdbcTemplate - .query("SELECT primer_nombre, segundo_nombre, telefono FROM persona", - (rs, row) -> new Persona(rs.getString(1), rs.getString(2), rs.getString(3))) - .forEach(persona -> LOG.info("Registro < " + persona + " >")); + .query("SELECT first_name, second_name, phone FROM person", + (rs, row) -> new Person(rs.getString(1), rs.getString(2), rs.getString(3))) + .forEach(person -> log.info("Record < " + person + " >")); } } diff --git a/demo-spring-batch/src/main/java/com/example/demospringbatch/model/Person.java b/demo-spring-batch/src/main/java/com/example/demospringbatch/model/Person.java new file mode 100644 index 0000000..fba64c5 --- /dev/null +++ b/demo-spring-batch/src/main/java/com/example/demospringbatch/model/Person.java @@ -0,0 +1,16 @@ +package com.example.demospringbatch.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Person { + + private String firstName; + private String secondName; + private String phone; + +} diff --git a/demo-spring-batch/src/main/java/com/example/demospringbatch/model/Persona.java b/demo-spring-batch/src/main/java/com/example/demospringbatch/model/Persona.java deleted file mode 100644 index dddb134..0000000 --- a/demo-spring-batch/src/main/java/com/example/demospringbatch/model/Persona.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.example.demospringbatch.model; - -public class Persona { - - private String primerNombre; - private String segundoNombre; - private String telefono; - - public Persona() { - super(); - } - - public Persona(String primerNombre, String segundoNombre, String telefono) { - super(); - this.primerNombre = primerNombre; - this.segundoNombre = segundoNombre; - this.telefono = telefono; - } - - public String getPrimerNombre() { - return primerNombre; - } - - public void setPrimerNombre(String primerNombre) { - this.primerNombre = primerNombre; - } - - public String getSegundoNombre() { - return segundoNombre; - } - - public void setSegundoNombre(String segundoNombre) { - this.segundoNombre = segundoNombre; - } - - public String getTelefono() { - return telefono; - } - - public void setTelefono(String telefono) { - this.telefono = telefono; - } - - @Override - public String toString() { - return "Persona [primerNombre=" + primerNombre + ", segundoNombre=" + segundoNombre + ", telefono=" + telefono - + "]"; - } - - - -} diff --git a/demo-spring-batch/src/main/java/com/example/demospringbatch/processor/PersonItemProcessor.java b/demo-spring-batch/src/main/java/com/example/demospringbatch/processor/PersonItemProcessor.java new file mode 100644 index 0000000..7a3b84f --- /dev/null +++ b/demo-spring-batch/src/main/java/com/example/demospringbatch/processor/PersonItemProcessor.java @@ -0,0 +1,25 @@ +package com.example.demospringbatch.processor; + +import org.springframework.batch.item.ItemProcessor; + +import com.example.demospringbatch.model.Person; + +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class PersonItemProcessor implements ItemProcessor { + + @Override + public Person process(Person item) throws Exception { + String firstName = item.getFirstName().toUpperCase(); + String secondName = item.getSecondName().toUpperCase(); + String phone = item.getPhone(); + + Person person = new Person(firstName, secondName, phone); + + log.info("Changing ("+item+") a ("+person+")"); + + return person; + } + +} diff --git a/demo-spring-batch/src/main/java/com/example/demospringbatch/processor/PersonaItemProcessor.java b/demo-spring-batch/src/main/java/com/example/demospringbatch/processor/PersonaItemProcessor.java deleted file mode 100644 index 8aac828..0000000 --- a/demo-spring-batch/src/main/java/com/example/demospringbatch/processor/PersonaItemProcessor.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.example.demospringbatch.processor; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.batch.item.ItemProcessor; - -import com.example.demospringbatch.model.Persona; - -public class PersonaItemProcessor implements ItemProcessor { - - private static final Logger LOG = LoggerFactory.getLogger(PersonaItemProcessor.class); - - @Override - public Persona process(Persona item) throws Exception { - String primerNombre = item.getPrimerNombre().toUpperCase(); - String segundoNombre = item.getSegundoNombre().toUpperCase(); - String telefono = item.getTelefono(); - - Persona persona = new Persona(primerNombre, segundoNombre, telefono); - - LOG.info("Convirtiendo ("+item+") a ("+persona+")"); - - return persona; - } - -} diff --git a/demo-spring-batch/src/main/resources/schema-all.sql b/demo-spring-batch/src/main/resources/schema-all.sql index 65c5909..2c47861 100644 --- a/demo-spring-batch/src/main/resources/schema-all.sql +++ b/demo-spring-batch/src/main/resources/schema-all.sql @@ -1,8 +1,8 @@ -DROP TABLE persona IF EXISTS; +DROP TABLE person IF EXISTS; -CREATE TABLE persona( +CREATE TABLE person( id BIGINT IDENTITY NOT NULL PRIMARY KEY, - primer_nombre VARCHAR(20), - segundo_nombre VARCHAR(20), - telefono VARCHAR(10) + first_name VARCHAR(20), + second_name VARCHAR(20), + phone VARCHAR(10) ); \ No newline at end of file diff --git a/demo-spring-batch/target/classes/META-INF/MANIFEST.MF b/demo-spring-batch/target/classes/META-INF/MANIFEST.MF deleted file mode 100644 index 0327c05..0000000 --- a/demo-spring-batch/target/classes/META-INF/MANIFEST.MF +++ /dev/null @@ -1,10 +0,0 @@ -Manifest-Version: 1.0 -Implementation-Title: demo-spring-batch -Implementation-Version: 0.0.1-SNAPSHOT -Built-By: jordyrodriguez -Implementation-Vendor-Id: com.example -Build-Jdk: 1.8.0_181 -Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo - ot-starter-parent/demo-spring-batch -Created-By: Maven Integration for Eclipse - diff --git a/demo-spring-batch/target/classes/META-INF/maven/com.example/demo-spring-batch/pom.properties b/demo-spring-batch/target/classes/META-INF/maven/com.example/demo-spring-batch/pom.properties deleted file mode 100644 index f3bccee..0000000 --- a/demo-spring-batch/target/classes/META-INF/maven/com.example/demo-spring-batch/pom.properties +++ /dev/null @@ -1,7 +0,0 @@ -#Generated by Maven Integration for Eclipse -#Fri Mar 22 13:13:49 COT 2019 -version=0.0.1-SNAPSHOT -groupId=com.example -m2e.projectName=demo-spring-batch -m2e.projectLocation=/Users/jordyrodriguez/Desktop/demo-spring-batch -artifactId=demo-spring-batch diff --git a/demo-spring-batch/target/classes/META-INF/maven/com.example/demo-spring-batch/pom.xml b/demo-spring-batch/target/classes/META-INF/maven/com.example/demo-spring-batch/pom.xml deleted file mode 100644 index ce92227..0000000 --- a/demo-spring-batch/target/classes/META-INF/maven/com.example/demo-spring-batch/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.1.3.RELEASE - - - com.example - demo-spring-batch - 0.0.1-SNAPSHOT - demo-spring-batch - Demo project for Spring Boot - - - 1.8 - - - - - org.springframework.boot - spring-boot-starter-batch - - - - org.hsqldb - hsqldb - runtime - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.batch - spring-batch-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/demo-spring-batch/target/classes/com/example/demospringbatch/BatchConfiguration$1.class b/demo-spring-batch/target/classes/com/example/demospringbatch/BatchConfiguration$1.class index 04ac4f0..41824f5 100644 Binary files a/demo-spring-batch/target/classes/com/example/demospringbatch/BatchConfiguration$1.class and b/demo-spring-batch/target/classes/com/example/demospringbatch/BatchConfiguration$1.class differ diff --git a/demo-spring-batch/target/classes/com/example/demospringbatch/BatchConfiguration.class b/demo-spring-batch/target/classes/com/example/demospringbatch/BatchConfiguration.class index 48f521d..9e13374 100644 Binary files a/demo-spring-batch/target/classes/com/example/demospringbatch/BatchConfiguration.class and b/demo-spring-batch/target/classes/com/example/demospringbatch/BatchConfiguration.class differ diff --git a/demo-spring-batch/target/classes/com/example/demospringbatch/listener/JobListener.class b/demo-spring-batch/target/classes/com/example/demospringbatch/listener/JobListener.class index 9247e4c..9fa2c65 100644 Binary files a/demo-spring-batch/target/classes/com/example/demospringbatch/listener/JobListener.class and b/demo-spring-batch/target/classes/com/example/demospringbatch/listener/JobListener.class differ diff --git a/demo-spring-batch/target/classes/com/example/demospringbatch/model/Persona.class b/demo-spring-batch/target/classes/com/example/demospringbatch/model/Persona.class deleted file mode 100644 index 1ff7b91..0000000 Binary files a/demo-spring-batch/target/classes/com/example/demospringbatch/model/Persona.class and /dev/null differ diff --git a/demo-spring-batch/target/classes/com/example/demospringbatch/processor/PersonaItemProcessor.class b/demo-spring-batch/target/classes/com/example/demospringbatch/processor/PersonaItemProcessor.class deleted file mode 100644 index a5bef40..0000000 Binary files a/demo-spring-batch/target/classes/com/example/demospringbatch/processor/PersonaItemProcessor.class and /dev/null differ diff --git a/demo-spring-batch/target/classes/schema-all.sql b/demo-spring-batch/target/classes/schema-all.sql index 65c5909..2c47861 100644 --- a/demo-spring-batch/target/classes/schema-all.sql +++ b/demo-spring-batch/target/classes/schema-all.sql @@ -1,8 +1,8 @@ -DROP TABLE persona IF EXISTS; +DROP TABLE person IF EXISTS; -CREATE TABLE persona( +CREATE TABLE person( id BIGINT IDENTITY NOT NULL PRIMARY KEY, - primer_nombre VARCHAR(20), - segundo_nombre VARCHAR(20), - telefono VARCHAR(10) + first_name VARCHAR(20), + second_name VARCHAR(20), + phone VARCHAR(10) ); \ No newline at end of file