111 lines
3.9 KiB
Java
111 lines
3.9 KiB
Java
package hello;
|
|
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
import java.util.List;
|
|
|
|
import javax.sql.DataSource;
|
|
|
|
import org.springframework.batch.core.Job;
|
|
import org.springframework.batch.core.Step;
|
|
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
|
|
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.ItemProcessor;
|
|
import org.springframework.batch.item.ItemReader;
|
|
import org.springframework.batch.item.ItemWriter;
|
|
import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
|
|
import org.springframework.batch.item.database.JdbcBatchItemWriter;
|
|
import org.springframework.batch.item.file.FlatFileItemReader;
|
|
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
|
|
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
|
|
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
|
|
import org.springframework.bootstrap.SpringApplication;
|
|
import org.springframework.bootstrap.context.annotation.EnableAutoConfiguration;
|
|
import org.springframework.context.ApplicationContext;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.core.io.ClassPathResource;
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.jdbc.core.RowMapper;
|
|
|
|
@Configuration
|
|
@EnableBatchProcessing
|
|
@EnableAutoConfiguration
|
|
public class BatchConfiguration {
|
|
|
|
// {!begin#reader-writer-processor}
|
|
@Bean
|
|
public ItemReader<Person> reader() {
|
|
FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>();
|
|
reader.setResource(new ClassPathResource("sample-data.csv"));
|
|
reader.setLineMapper(new DefaultLineMapper<Person>() {{
|
|
setLineTokenizer(new DelimitedLineTokenizer() {{
|
|
setNames(new String[] { "firstName", "lastName" });
|
|
}});
|
|
setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
|
|
setTargetType(Person.class);
|
|
}});
|
|
}});
|
|
return reader;
|
|
}
|
|
|
|
@Bean
|
|
public ItemProcessor<Person, Person> processor() {
|
|
return new PersonItemProcessor();
|
|
}
|
|
|
|
@Bean
|
|
public ItemWriter<Person> writer(DataSource dataSource) {
|
|
JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<Person>();
|
|
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<Person>());
|
|
writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
|
|
writer.setDataSource(dataSource);
|
|
return writer;
|
|
}
|
|
// {!end#reader-writer-processor}
|
|
|
|
// {!begin#job-step}
|
|
@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<Person> reader,
|
|
ItemWriter<Person> writer, ItemProcessor<Person, Person> processor) {
|
|
return stepBuilderFactory.get("step1")
|
|
.<Person, Person> chunk(10)
|
|
.reader(reader)
|
|
.processor(processor)
|
|
.writer(writer)
|
|
.build();
|
|
}
|
|
// {!end#job-step}
|
|
|
|
// {!begin#template-main}
|
|
@Bean
|
|
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
|
|
return new JdbcTemplate(dataSource);
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
ApplicationContext ctx = SpringApplication.run(BatchConfiguration.class, args);
|
|
List<Person> results = ctx.getBean(JdbcTemplate.class).query("SELECT first_name, last_name FROM people", new RowMapper<Person>() {
|
|
@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#template-main}
|
|
}
|