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

  1. spring-boot-batch-starter-example

  2. spring-batch

  3. spring-batch-admin-spring-boot

  4. spring-batch-tutorial-with-spring-boot-and-java-configuration

关键字:java


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部