Spring Batch使用实例:从接口获取数据,保存到数据库

1. 首先,需要定义一个Spring Batch的Job,用于从接口获取数据并保存到数据库中。可以使用Spring Batch提供的ItemReader和ItemWriter来实现这个过程。
2. 在ItemReader中,您需要定义一个Reader来从接口获取数据。可以使用Spring提供的RestTemplate来发送HTTP请求并获取数据。
3. 在ItemWriter中,您需要定义一个Writer来将数据保存到数据库中。可以使用Spring JDBC来操作数据库,使用JdbcTemplate来执行SQL语句。
4. 在Job中,您需要将Reader和Writer组合起来,并定义一些步骤来指定数据的处理流程。
5. 最后,您需要配置Spring Batch的相关参数,如数据源、事务管理器、任务调度器等。

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private DataSource dataSource;

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource);
    }

    @Bean
    public ItemReader<MyData> myDataReader(RestTemplate restTemplate) {
        return new MyDataReader(restTemplate);
    }

    @Bean
    public ItemWriter<MyData> myDataWriter(JdbcTemplate jdbcTemplate) {
        return new MyDataWriter(jdbcTemplate);
    }

    @Bean
    public Step myDataStep(ItemReader<MyData> reader, ItemWriter<MyData> writer) {
        return stepBuilderFactory.get("myDataStep")
                .<MyData, MyData>chunk(10)
                .reader(reader)
                .writer(writer)
                .build();
    }

    @Bean
    public Job myDataJob(Step myDataStep) {
        return jobBuilderFactory.get("myDataJob")
                .incrementer(new RunIdIncrementer())
                .flow(myDataStep)
                .end()
                .build();
    }
}

public class MyDataReader implements ItemReader<MyData> {

    private RestTemplate restTemplate;

    public MyDataReader(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @Override
    public MyData read() throws Exception {
        // 从接口获取数据
        ResponseEntity<MyData> response = restTemplate.getForEntity("http://example.com/mydata", MyData.class);
        return response.getBody();
    }
}

public class MyDataWriter implements ItemWriter<MyData> {

    private JdbcTemplate jdbcTemplate;

    public MyDataWriter(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public void write(List<? extends MyData> items) throws Exception {
        // 将数据保存到数据库
        for (MyData item : items) {
            jdbcTemplate.update("INSERT INTO my_table (id, name, value) VALUES (?, ?, ?)",
                    item.getId(), item.getName(), item.getValue());
        }
    }
}

// MyData类定义
public class MyData {
    private Long id;
    private String name;
    private Integer value;
    // getter和setter方法
}

猜你喜欢

转载自blog.csdn.net/worldkingpan/article/details/129424005