spring-batch实例
config
@EnableBatchProcessing(modular = true)@Configurationpublic class BatchConfig { private static final Logger LOGGER = LoggerFactory.getLogger(BatchConfig.class); @Bean public Job importUserJob(JobBuilderFactory jobs, Step s1, JobExecutionListener listener) { return jobs.get("importUserJob") .incrementer(new RunIdIncrementer()) .listener(listener) .flow(s1) .end() .build(); } @Bean public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader reader, ItemWriter writer, ItemProcessor processor) { return stepBuilderFactory.get("step1") .chunk(5) .reader(reader) .processor(processor) .writer(writer) .build(); } @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean public ItemReader reader(DataSource dataSource) { JdbcCursorItemReader reader = new JdbcCursorItemReader(); reader.setSql("select id, first_name, last_name, random_num from reader"); reader.setDataSource(dataSource); reader.setRowMapper( (ResultSet resultSet, int rowNum) -> { LOGGER.info("RowMapper resultset: {}", resultSet); if (!(resultSet.isAfterLast()) && !(resultSet.isBeforeFirst())) { RecordSO recordSO = new RecordSO(); recordSO.setFirstName(resultSet.getString("first_name")); recordSO.setLastName(resultSet.getString("last_name")); recordSO.setId(resultSet.getLong("id")); recordSO.setRandomNum(resultSet.getString("random_num")); LOGGER.info("RowMapper record : {}", recordSO); return recordSO; } else { LOGGER.info("Returning null from rowMapper"); return null; } }); return reader; } @Bean public ItemPreparedStatementSetter setter() { return (item, ps) -> { ps.setLong(1, item.getId()); ps.setString(2, item.getFullName()); ps.setString(3, item.getRandomNum()); }; } @Bean public ItemProcessor processor() { return new RecordProcessor(); } @Bean public ItemWriter writer(DataSource dataSource, ItemPreparedStatementSetter setter) { JdbcBatchItemWriter writer = new JdbcBatchItemWriter(); writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider()); writer.setItemPreparedStatementSetter(setter); writer.setSql("insert into writer (id, full_name, random_num) values (?,?,?)"); writer.setDataSource(dataSource); return writer; }}
model
@Entity@Table(name = "reader")public class RecordSO { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String firstName; private String lastName; private String randomNum; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getRandomNum() { return randomNum; } public void setRandomNum(String randomNum) { this.randomNum = randomNum; }}@Entity@Table(name = "writer")public class WriterSO { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String fullName; private String randomNum; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFullName() { return fullName; } public void setFullName(String fullName) { this.fullName = fullName; } public String getRandomNum() { return randomNum; } public void setRandomNum(String randomNum) { this.randomNum = randomNum; }}
application.properties
spring.datasource.driverClassName=org.postgresql.Driverspring.datasource.url=jdbc:postgresql://192.168.99.100:5432/batchspring.datasource.username=postgresspring.datasource.password=mypwd## spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialectspring.jpa.show-sql=truespring.jpa.generate-ddl=truespring.jpa.hibernate.ddl-auto=create-dropspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
processor
public class RecordProcessor implements ItemProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(RecordProcessor.class); @Override public WriterSO process(RecordSO item) throws Exception { LOGGER.info("Processing Record: {}", item); WriterSO writerSo = new WriterSO(); writerSo.setId(item.getId()); writerSo.setFullName(item.getFirstName() + " " + item.getLastName()); writerSo.setRandomNum(String.valueOf(Math.random()).substring(3, 8)); LOGGER.info("Processed Writer: {}", writerSo); return writerSo; }}
docs
spring-boot-batch-starter-example
spring-batch
spring-batch-admin-spring-boot
spring-batch-tutorial-with-spring-boot-and-java-configuration
关键字:java
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!