diff --git a/README.md b/README.md
index 6ea42c29c1..831463a254 100644
--- a/README.md
+++ b/README.md
@@ -54,12 +54,12 @@ In a project directory of your choosing, create the following subdirectory struc
```xml
- 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.springframework
- gs-batch-processing
- 0.1.0
+ org.springframework
+ gs-batch-processing
+ 0.1.0
org.springframework.boot
@@ -67,7 +67,7 @@ In a project directory of your choosing, create the following subdirectory struc
0.5.0.BUILD-SNAPSHOT
-
+
org.springframework.boot
spring-boot-starter-batch
@@ -76,27 +76,24 @@ In a project directory of your choosing, create the following subdirectory struc
org.hsqldb
hsqldb
-
+
+
+
+
+ spring-snapshots
+ http://repo.springsource.org/libs-snapshot
+ true
+
+
+
+
+
+ spring-snapshots
+ http://repo.springsource.org/libs-snapshot
+ true
+
+
-
-
- spring-snapshots
- http://repo.springsource.org/libs-snapshot
- true
-
-
- spring-milestones
- http://repo.springsource.org/libs-milestone
- true
-
-
-
-
- spring-snapshots
- http://repo.springsource.org/libs-snapshot
- true
-
-
```
@@ -128,9 +125,9 @@ Next, you write a SQL script to create a table to store the data.
DROP TABLE people IF EXISTS;
CREATE TABLE people (
- person_id BIGINT IDENTITY NOT NULL PRIMARY KEY,
- first_name VARCHAR(20),
- last_name VARCHAR(20)
+ person_id BIGINT IDENTITY NOT NULL PRIMARY KEY,
+ first_name VARCHAR(20),
+ last_name VARCHAR(20)
);
```
@@ -149,19 +146,19 @@ package hello;
public class Person {
private String lastName;
private String firstName;
-
+
public Person() {
-
+
}
- public Person(String firstName, String lastName) {
- this.firstName = firstName;
- this.lastName = lastName;
- }
+ public Person(String firstName, String lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
- public void setFirstName(String firstName) {
- this.firstName = firstName;
- }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
public String getFirstName() {
return firstName;
@@ -172,13 +169,14 @@ public class Person {
}
public void setLastName(String lastName) {
- this.lastName = lastName;
- }
+ this.lastName = lastName;
+ }
@Override
public String toString() {
return "firstName: " + firstName + ", lastName: " + lastName;
}
+
}
```
@@ -196,17 +194,19 @@ package hello;
import org.springframework.batch.item.ItemProcessor;
public class PersonItemProcessor implements ItemProcessor {
+
@Override
public Person process(final Person person) throws Exception {
final String firstName = person.getFirstName().toUpperCase();
final String lastName = person.getLastName().toUpperCase();
-
+
final Person transformedPerson = new Person(firstName, lastName);
System.out.println("Converting (" + person + ") into (" + transformedPerson + ")");
-
+
return transformedPerson;
}
+
}
```
@@ -258,72 +258,72 @@ import org.springframework.jdbc.core.RowMapper;
@EnableAutoConfiguration
public class BatchConfiguration {
- @Bean
- public ItemReader reader() {
- FlatFileItemReader reader = new FlatFileItemReader();
- reader.setResource(new ClassPathResource("sample-data.csv"));
- reader.setLineMapper(new DefaultLineMapper() {{
- setLineTokenizer(new DelimitedLineTokenizer() {{
- setNames(new String[] { "firstName", "lastName" });
- }});
- setFieldSetMapper(new BeanWrapperFieldSetMapper() {{
- setTargetType(Person.class);
- }});
- }});
- return reader;
- }
+ @Bean
+ public ItemReader reader() {
+ FlatFileItemReader reader = new FlatFileItemReader();
+ reader.setResource(new ClassPathResource("sample-data.csv"));
+ reader.setLineMapper(new DefaultLineMapper() {{
+ setLineTokenizer(new DelimitedLineTokenizer() {{
+ setNames(new String[] { "firstName", "lastName" });
+ }});
+ setFieldSetMapper(new BeanWrapperFieldSetMapper() {{
+ setTargetType(Person.class);
+ }});
+ }});
+ return reader;
+ }
- @Bean
- public ItemProcessor processor() {
- return new PersonItemProcessor();
- }
+ @Bean
+ public ItemProcessor processor() {
+ return new PersonItemProcessor();
+ }
- @Bean
- public ItemWriter writer(DataSource dataSource) {
- JdbcBatchItemWriter writer = new JdbcBatchItemWriter();
- writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider());
- writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
- writer.setDataSource(dataSource);
- return writer;
- }
+ @Bean
+ public ItemWriter writer(DataSource dataSource) {
+ JdbcBatchItemWriter writer = new JdbcBatchItemWriter();
+ writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider());
+ writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
+ writer.setDataSource(dataSource);
+ return writer;
+ }
- @Bean
- public Job importUserJob(JobBuilderFactory jobs, Step s1) {
- return jobs.get("importUserJob")
- .incrementer(new RunIdIncrementer())
- .flow(s1)
- .end()
- .build();
- }
+ @Bean
+ public Job importUserJob(JobBuilderFactory jobs, Step s1) {
+ return jobs.get("importUserJob")
+ .incrementer(new RunIdIncrementer())
+ .flow(s1)
+ .end()
+ .build();
+ }
- @Bean
- public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader reader,
- ItemWriter writer, ItemProcessor processor) {
- return stepBuilderFactory.get("step1")
- . chunk(10)
- .reader(reader)
- .processor(processor)
- .writer(writer)
- .build();
- }
+ @Bean
+ public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader reader,
+ ItemWriter writer, ItemProcessor processor) {
+ return stepBuilderFactory.get("step1")
+ . chunk(10)
+ .reader(reader)
+ .processor(processor)
+ .writer(writer)
+ .build();
+ }
- @Bean
- public JdbcTemplate jdbcTemplate(DataSource dataSource) {
- return new JdbcTemplate(dataSource);
- }
+ @Bean
+ public JdbcTemplate jdbcTemplate(DataSource dataSource) {
+ return new JdbcTemplate(dataSource);
+ }
- public static void main(String[] args) {
- ApplicationContext ctx = SpringApplication.run(BatchConfiguration.class, args);
- List results = ctx.getBean(JdbcTemplate.class).query("SELECT first_name, last_name FROM people", new RowMapper() {
- @Override
- public Person mapRow(ResultSet rs, int row) throws SQLException {
- return new Person(rs.getString(1), rs.getString(2));
- }
- });
- for (Person person : results) {
- System.out.println("Found <" + person + "> in the database.");
- }
- }
+ public static void main(String[] args) {
+ ApplicationContext ctx = SpringApplication.run(BatchConfiguration.class, args);
+ List results = ctx.getBean(JdbcTemplate.class).query("SELECT first_name, last_name FROM people", new RowMapper() {
+ @Override
+ public Person mapRow(ResultSet rs, int row) throws SQLException {
+ return new Person(rs.getString(1), rs.getString(2));
+ }
+ });
+ for (Person person : results) {
+ System.out.println("Found <" + person + "> in the database.");
+ }
+ }
}
```
@@ -333,34 +333,34 @@ Break it down:
`src/main/java/hello/BatchConfiguration.java`
```java
- @Bean
- public ItemReader reader() {
- FlatFileItemReader reader = new FlatFileItemReader();
- reader.setResource(new ClassPathResource("sample-data.csv"));
- reader.setLineMapper(new DefaultLineMapper() {{
- setLineTokenizer(new DelimitedLineTokenizer() {{
- setNames(new String[] { "firstName", "lastName" });
- }});
- setFieldSetMapper(new BeanWrapperFieldSetMapper() {{
- setTargetType(Person.class);
- }});
- }});
- return reader;
- }
+ @Bean
+ public ItemReader reader() {
+ FlatFileItemReader reader = new FlatFileItemReader();
+ reader.setResource(new ClassPathResource("sample-data.csv"));
+ reader.setLineMapper(new DefaultLineMapper() {{
+ setLineTokenizer(new DelimitedLineTokenizer() {{
+ setNames(new String[] { "firstName", "lastName" });
+ }});
+ setFieldSetMapper(new BeanWrapperFieldSetMapper() {{
+ setTargetType(Person.class);
+ }});
+ }});
+ return reader;
+ }
- @Bean
- public ItemProcessor processor() {
- return new PersonItemProcessor();
- }
+ @Bean
+ public ItemProcessor processor() {
+ return new PersonItemProcessor();
+ }
- @Bean
- public ItemWriter writer(DataSource dataSource) {
- JdbcBatchItemWriter writer = new JdbcBatchItemWriter();
- writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider());
- writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
- writer.setDataSource(dataSource);
- return writer;
- }
+ @Bean
+ public ItemWriter writer(DataSource dataSource) {
+ JdbcBatchItemWriter writer = new JdbcBatchItemWriter();
+ writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider());
+ writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
+ writer.setDataSource(dataSource);
+ return writer;
+ }
```
The first chunk of code defines the input, processor, and output.
@@ -372,25 +372,25 @@ The next chunk focuses on the actual job configuration.
`src/main/java/hello/BatchConfiguration.java`
```java
- @Bean
- public Job importUserJob(JobBuilderFactory jobs, Step s1) {
- return jobs.get("importUserJob")
- .incrementer(new RunIdIncrementer())
- .flow(s1)
- .end()
- .build();
- }
+ @Bean
+ public Job importUserJob(JobBuilderFactory jobs, Step s1) {
+ return jobs.get("importUserJob")
+ .incrementer(new RunIdIncrementer())
+ .flow(s1)
+ .end()
+ .build();
+ }
- @Bean
- public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader reader,
- ItemWriter writer, ItemProcessor processor) {
- return stepBuilderFactory.get("step1")
- . chunk(10)
- .reader(reader)
- .processor(processor)
- .writer(writer)
- .build();
- }
+ @Bean
+ public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader reader,
+ ItemWriter writer, ItemProcessor processor) {
+ return stepBuilderFactory.get("step1")
+ . chunk(10)
+ .reader(reader)
+ .processor(processor)
+ .writer(writer)
+ .build();
+ }
```
The first method defines the job and the second one defines a single step. Jobs are built from steps, where each step can involve a reader, a processor, and a writer.
@@ -405,23 +405,23 @@ Finally, you run the application.
`src/main/java/hello/BatchConfiguration.java`
```java
- @Bean
- public JdbcTemplate jdbcTemplate(DataSource dataSource) {
- return new JdbcTemplate(dataSource);
- }
+ @Bean
+ public JdbcTemplate jdbcTemplate(DataSource dataSource) {
+ return new JdbcTemplate(dataSource);
+ }
- public static void main(String[] args) {
- ApplicationContext ctx = SpringApplication.run(BatchConfiguration.class, args);
- List results = ctx.getBean(JdbcTemplate.class).query("SELECT first_name, last_name FROM people", new RowMapper() {
- @Override
- public Person mapRow(ResultSet rs, int row) throws SQLException {
- return new Person(rs.getString(1), rs.getString(2));
- }
- });
- for (Person person : results) {
- System.out.println("Found <" + person + "> in the database.");
- }
- }
+ public static void main(String[] args) {
+ ApplicationContext ctx = SpringApplication.run(BatchConfiguration.class, args);
+ List results = ctx.getBean(JdbcTemplate.class).query("SELECT first_name, last_name FROM people", new RowMapper() {
+ @Override
+ public Person mapRow(ResultSet rs, int row) throws SQLException {
+ return new Person(rs.getString(1), rs.getString(2));
+ }
+ });
+ for (Person person : results) {
+ System.out.println("Found <" + person + "> in the database.");
+ }
+ }
```
This example uses a memory-based database (provided by `@EnableBatchProcessing`), meaning that when it's done, the data is gone. For demonstration purposes, there is extra code to create a `JdbcTemplate`, query the database, and print out the names of people the batch job inserts.
diff --git a/complete/pom.xml b/complete/pom.xml
index ee41ee7467..4f99c5e196 100644
--- a/complete/pom.xml
+++ b/complete/pom.xml
@@ -1,11 +1,11 @@
- 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.springframework
- gs-batch-processing
- 0.1.0
+ org.springframework
+ gs-batch-processing
+ 0.1.0
org.springframework.boot
@@ -13,7 +13,7 @@
0.5.0.BUILD-SNAPSHOT
-
+
org.springframework.boot
spring-boot-starter-batch
@@ -22,38 +22,35 @@
org.hsqldb
hsqldb
-
+
-
- hello.BatchConfiguration
-
+
+ hello.BatchConfiguration
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+ spring-snapshots
+ http://repo.springsource.org/libs-snapshot
+ true
+
+
+
+
+
+ spring-snapshots
+ http://repo.springsource.org/libs-snapshot
+ true
+
+
-
-
- spring-snapshots
- http://repo.springsource.org/libs-snapshot
- true
-
-
- spring-milestones
- http://repo.springsource.org/libs-milestone
- true
-
-
-
-
- spring-snapshots
- http://repo.springsource.org/libs-snapshot
- true
-
-
diff --git a/complete/src/main/java/hello/BatchConfiguration.java b/complete/src/main/java/hello/BatchConfiguration.java
index 03e27eb1eb..f5e9230719 100644
--- a/complete/src/main/java/hello/BatchConfiguration.java
+++ b/complete/src/main/java/hello/BatchConfiguration.java
@@ -35,76 +35,76 @@ import org.springframework.jdbc.core.RowMapper;
@EnableAutoConfiguration
public class BatchConfiguration {
- // {!begin readerwriterprocessor}
- @Bean
- public ItemReader reader() {
- FlatFileItemReader reader = new FlatFileItemReader();
- reader.setResource(new ClassPathResource("sample-data.csv"));
- reader.setLineMapper(new DefaultLineMapper() {{
- setLineTokenizer(new DelimitedLineTokenizer() {{
- setNames(new String[] { "firstName", "lastName" });
- }});
- setFieldSetMapper(new BeanWrapperFieldSetMapper() {{
- setTargetType(Person.class);
- }});
- }});
- return reader;
- }
+ // {!begin readerwriterprocessor}
+ @Bean
+ public ItemReader reader() {
+ FlatFileItemReader reader = new FlatFileItemReader();
+ reader.setResource(new ClassPathResource("sample-data.csv"));
+ reader.setLineMapper(new DefaultLineMapper() {{
+ setLineTokenizer(new DelimitedLineTokenizer() {{
+ setNames(new String[] { "firstName", "lastName" });
+ }});
+ setFieldSetMapper(new BeanWrapperFieldSetMapper() {{
+ setTargetType(Person.class);
+ }});
+ }});
+ return reader;
+ }
- @Bean
- public ItemProcessor processor() {
- return new PersonItemProcessor();
- }
+ @Bean
+ public ItemProcessor processor() {
+ return new PersonItemProcessor();
+ }
- @Bean
- public ItemWriter writer(DataSource dataSource) {
- JdbcBatchItemWriter writer = new JdbcBatchItemWriter();
- writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider());
- writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
- writer.setDataSource(dataSource);
- return writer;
- }
- // {!end readerwriterprocessor}
+ @Bean
+ public ItemWriter writer(DataSource dataSource) {
+ JdbcBatchItemWriter writer = new JdbcBatchItemWriter();
+ writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider());
+ writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
+ writer.setDataSource(dataSource);
+ return writer;
+ }
+ // {!end readerwriterprocessor}
- // {!begin jobstep}
- @Bean
- public Job importUserJob(JobBuilderFactory jobs, Step s1) {
- return jobs.get("importUserJob")
- .incrementer(new RunIdIncrementer())
- .flow(s1)
- .end()
- .build();
- }
+ // {!begin jobstep}
+ @Bean
+ public Job importUserJob(JobBuilderFactory jobs, Step s1) {
+ return jobs.get("importUserJob")
+ .incrementer(new RunIdIncrementer())
+ .flow(s1)
+ .end()
+ .build();
+ }
- @Bean
- public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader reader,
- ItemWriter writer, ItemProcessor processor) {
- return stepBuilderFactory.get("step1")
- . chunk(10)
- .reader(reader)
- .processor(processor)
- .writer(writer)
- .build();
- }
- // {!end jobstep}
+ @Bean
+ public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader reader,
+ ItemWriter writer, ItemProcessor processor) {
+ return stepBuilderFactory.get("step1")
+ . chunk(10)
+ .reader(reader)
+ .processor(processor)
+ .writer(writer)
+ .build();
+ }
+ // {!end jobstep}
- // {!begin templatemain}
- @Bean
- public JdbcTemplate jdbcTemplate(DataSource dataSource) {
- return new JdbcTemplate(dataSource);
- }
+ // {!begin templatemain}
+ @Bean
+ public JdbcTemplate jdbcTemplate(DataSource dataSource) {
+ return new JdbcTemplate(dataSource);
+ }
- public static void main(String[] args) {
- ApplicationContext ctx = SpringApplication.run(BatchConfiguration.class, args);
- List results = ctx.getBean(JdbcTemplate.class).query("SELECT first_name, last_name FROM people", new RowMapper() {
- @Override
- public Person mapRow(ResultSet rs, int row) throws SQLException {
- return new Person(rs.getString(1), rs.getString(2));
- }
- });
- for (Person person : results) {
- System.out.println("Found <" + person + "> in the database.");
- }
- }
- // {!end templatemain}
+ public static void main(String[] args) {
+ ApplicationContext ctx = SpringApplication.run(BatchConfiguration.class, args);
+ List results = ctx.getBean(JdbcTemplate.class).query("SELECT first_name, last_name FROM people", new RowMapper() {
+ @Override
+ public Person mapRow(ResultSet rs, int row) throws SQLException {
+ return new Person(rs.getString(1), rs.getString(2));
+ }
+ });
+ for (Person person : results) {
+ System.out.println("Found <" + person + "> in the database.");
+ }
+ }
+ // {!end templatemain}
}
diff --git a/complete/src/main/java/hello/Person.java b/complete/src/main/java/hello/Person.java
index 0cc17ed8a2..745c739150 100644
--- a/complete/src/main/java/hello/Person.java
+++ b/complete/src/main/java/hello/Person.java
@@ -3,19 +3,19 @@ package hello;
public class Person {
private String lastName;
private String firstName;
-
+
public Person() {
-
+
}
- public Person(String firstName, String lastName) {
- this.firstName = firstName;
- this.lastName = lastName;
- }
+ public Person(String firstName, String lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
- public void setFirstName(String firstName) {
- this.firstName = firstName;
- }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
public String getFirstName() {
return firstName;
@@ -26,11 +26,12 @@ public class Person {
}
public void setLastName(String lastName) {
- this.lastName = lastName;
- }
+ this.lastName = lastName;
+ }
@Override
public String toString() {
return "firstName: " + firstName + ", lastName: " + lastName;
}
+
}
diff --git a/complete/src/main/java/hello/PersonItemProcessor.java b/complete/src/main/java/hello/PersonItemProcessor.java
index 5256af777f..0752f5868b 100644
--- a/complete/src/main/java/hello/PersonItemProcessor.java
+++ b/complete/src/main/java/hello/PersonItemProcessor.java
@@ -3,15 +3,17 @@ package hello;
import org.springframework.batch.item.ItemProcessor;
public class PersonItemProcessor implements ItemProcessor {
+
@Override
public Person process(final Person person) throws Exception {
final String firstName = person.getFirstName().toUpperCase();
final String lastName = person.getLastName().toUpperCase();
-
+
final Person transformedPerson = new Person(firstName, lastName);
System.out.println("Converting (" + person + ") into (" + transformedPerson + ")");
-
+
return transformedPerson;
}
+
}
diff --git a/complete/src/main/resources/schema-all.sql b/complete/src/main/resources/schema-all.sql
index 4e405e6de6..e472ce1e8c 100644
--- a/complete/src/main/resources/schema-all.sql
+++ b/complete/src/main/resources/schema-all.sql
@@ -1,7 +1,7 @@
DROP TABLE people IF EXISTS;
CREATE TABLE people (
- person_id BIGINT IDENTITY NOT NULL PRIMARY KEY,
- first_name VARCHAR(20),
- last_name VARCHAR(20)
+ person_id BIGINT IDENTITY NOT NULL PRIMARY KEY,
+ first_name VARCHAR(20),
+ last_name VARCHAR(20)
);
diff --git a/initial/pom.xml b/initial/pom.xml
index c31944b9ef..f40259867c 100644
--- a/initial/pom.xml
+++ b/initial/pom.xml
@@ -1,11 +1,11 @@
- 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.springframework
- gs-batch-processing
- 0.1.0
+ org.springframework
+ gs-batch-processing
+ 0.1.0
org.springframework.boot
@@ -13,7 +13,7 @@
0.5.0.BUILD-SNAPSHOT
-
+
org.springframework.boot
spring-boot-starter-batch
@@ -22,25 +22,22 @@
org.hsqldb
hsqldb
-
+
+
+
+
+ spring-snapshots
+ http://repo.springsource.org/libs-snapshot
+ true
+
+
+
+
+
+ spring-snapshots
+ http://repo.springsource.org/libs-snapshot
+ true
+
+
-
-
- spring-snapshots
- http://repo.springsource.org/libs-snapshot
- true
-
-
- spring-milestones
- http://repo.springsource.org/libs-milestone
- true
-
-
-
-
- spring-snapshots
- http://repo.springsource.org/libs-snapshot
- true
-
-
diff --git a/initial/src/main/resources/schema-all.sql b/initial/src/main/resources/schema-all.sql
index 4e405e6de6..e472ce1e8c 100644
--- a/initial/src/main/resources/schema-all.sql
+++ b/initial/src/main/resources/schema-all.sql
@@ -1,7 +1,7 @@
DROP TABLE people IF EXISTS;
CREATE TABLE people (
- person_id BIGINT IDENTITY NOT NULL PRIMARY KEY,
- first_name VARCHAR(20),
- last_name VARCHAR(20)
+ person_id BIGINT IDENTITY NOT NULL PRIMARY KEY,
+ first_name VARCHAR(20),
+ last_name VARCHAR(20)
);