Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用spring数据jpa定制ItemReader_Java_Spring Boot_Spring Batch_Spring Data Jpa - Fatal编程技术网

Java 使用spring数据jpa定制ItemReader

Java 使用spring数据jpa定制ItemReader,java,spring-boot,spring-batch,spring-data-jpa,Java,Spring Boot,Spring Batch,Spring Data Jpa,我正在使用现有的实体和存储库创建一个Spring批处理项目。对于使用现有jpa存储库读取数据的作业,我需要使用自定义ItemReader 自定义阅读器 public class InMemoryReader implements ItemReader<Product> { @Autowired private ProductService productService; private int nextStudentIndex; private

我正在使用现有的实体和存储库创建一个Spring批处理项目。对于使用现有jpa存储库读取数据的作业,我需要使用自定义
ItemReader

自定义阅读器

public class InMemoryReader implements ItemReader<Product> {

    @Autowired
    private ProductService productService;


    private int nextStudentIndex;
    private List<Product> studentData;

    public InMemoryReader() {
        initialize();
    }

    private void initialize() {
        studentData = new ArrayList<Product>();
        studentData.add(new Product("hi"));

        for (Product p : productService.get())
            studentData.add(p);
        nextStudentIndex = 0;
    }

    @Override
    public Product read() throws Exception {
        Product nextStudent = null;

        if (nextStudentIndex < studentData.size()) {
            nextStudent = studentData.get(nextStudentIndex);
            nextStudentIndex++;
        }

        return nextStudent;
    }
}
批配置文件

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {


    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    private DataSource dataSource;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Bean
    public ItemReader<Product> reader() throws Exception {
        return new InMemoryReader();
    }


    @Bean
    public ProductItemProcessor processor() {
        return new ProductItemProcessor();
    }

    @Bean
    public ItemWriter<Product> writer() {
        return new ItemWriter<Product>() {
            @Override
            public void write(List<? extends Product> items) throws Exception {

            }
        };
    }
    // end::readerwriterprocessor[]

    // tag::listener[]

    @Bean
    public JobExecutionListener listener() {
        return null;
    }

    // end::listener[]

    // tag::jobstep[]

    @Bean
    public Job importPerson(JobBuilderFactory jobs, Step s1) {

        return jobs.get("import")
                .incrementer(new RunIdIncrementer()) // because a spring config bug, this incrementer is not really useful
                .flow(s1)
                .end()
                .build();
    }

    @Bean
    public Step step1() throws Exception {
        return stepBuilderFactory.get("step1")
                .<Product, Product>chunk(10)
                .reader(reader())
                .processor(processor())
                .writer(writer())
                .build();
    }
}
@配置
@启用批处理
公共类批处理配置{
@自动连线
公共建筑商建筑商工厂;
@自动连线
私有数据源;
@自动连线
公共StepBuilderFactory StepBuilderFactory;
@豆子
public ItemReader()引发异常{
返回新的InMemoryReader();
}
@豆子
public ProductItemProcessor处理器(){
返回新的ProductItemProcessor();
}
@豆子
公共项目编写器(){
返回新的ItemWriter(){
@凌驾

public void write(List您正在从构造函数调用
initialize()
,即在连接
ProductService
依赖项之前

从构造函数中删除对
initialize()
的调用,而是让Spring在连接依赖项后调用它,方法是使用
@PostConstruct
对其进行注释,或使用此处概述的其他方法之一:


什么是null,productService?您如何创建InMemoryReader?
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {


    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    private DataSource dataSource;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Bean
    public ItemReader<Product> reader() throws Exception {
        return new InMemoryReader();
    }


    @Bean
    public ProductItemProcessor processor() {
        return new ProductItemProcessor();
    }

    @Bean
    public ItemWriter<Product> writer() {
        return new ItemWriter<Product>() {
            @Override
            public void write(List<? extends Product> items) throws Exception {

            }
        };
    }
    // end::readerwriterprocessor[]

    // tag::listener[]

    @Bean
    public JobExecutionListener listener() {
        return null;
    }

    // end::listener[]

    // tag::jobstep[]

    @Bean
    public Job importPerson(JobBuilderFactory jobs, Step s1) {

        return jobs.get("import")
                .incrementer(new RunIdIncrementer()) // because a spring config bug, this incrementer is not really useful
                .flow(s1)
                .end()
                .build();
    }

    @Bean
    public Step step1() throws Exception {
        return stepBuilderFactory.get("step1")
                .<Product, Product>chunk(10)
                .reader(reader())
                .processor(processor())
                .writer(writer())
                .build();
    }
}
@Service("productService")
public class ProductServiceImpl implements ProductService {

    private ProductRepository repository;

    @Autowired
    public ProductServiceImpl(ProductRepository repository) {
        this.repository = repository;
    }

    @Override
    public List<Product> get() {
        List<Product> list = new ArrayList<Product>();
        for (Product p : repository.findAll())
            list.add(p);
        return list;
    }
}