SpringBoot JPA repository always null

I have below code

Controller

  @RequestMapping("/reminder")
    @ResponseBody
    public String reminder() throws Exception {
        JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis())
                .toJobParameters();
        jobLauncher.run(job, jobParameters);
        return "Done";
    }
    

Config

@Configuration
public class BatchConfig {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job job() {  //defines a job

        return jobBuilderFactory.get("job")
                .incrementer(new RunIdIncrementer())
                .flow(step1())
                .end()
                .build();
    }

    @Bean
    public Step step1() {   // defines a single step
        return stepBuilderFactory.get("step1")
                .<A, A>chunk(1)    //important to be one in this case to commit after every line read
                .reader(new Reader())
                .processor(new Processor())
                .writer(new Writer())
                .build();
    }
}

Reader

@Service
public class Reader implements ItemReader<A> {

    private static final Logger log = LoggerFactory.getLogger(Reader.class);

    @Autowired
    MercRepository mercRepository;

    @Override
    public A read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
        if(mercRepository!=null)
        {
            System.out.println("not null");
        }else{
            System.out.println("null");
        }
        List<A> thList = mercRepository.getMer();
        System.out.println("thlist size " + thList.size());
        return (Campaign) thList;
    }
}

Error

null
2018-02-22 10:05:45 ERROR o.s.batch.core.step.AbstractStep - Encountered an error executing step step1 in job job
java.lang.NullPointerException: null
    at com.rh.app.batch.reader.Reader.read(Reader.java:43)
    at com.rh.app.batch.reader.Reader.read(Reader.java:27)
    at org.springframework.batch.core.step.item.SimpleChunkProvider.doRead(SimpleChunkProvider.java:91)
    at org.springframework.batch.core.step.item.SimpleChunkProvider.read(SimpleChunkProvider.java:157)
    at org.springframework.batch.core.step.item.SimpleChunkProvider$1.doInIteration(SimpleChunkProvider.java:116)
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:374)
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215)
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:144)

I have added a @Service to autowired the repository, but the error still exists. Any advice ?

阅读 5.4k
3 个回答

谢谢网友的回复,我已经找到解决方法了
MercRepository null 是因为我 new 一个 新 class,也就是new Reader()

解决方法

@Bean
public Step step1() {   // defines a single step
    return stepBuilderFactory.get("step1")
            .<A, A>chunk(1)    //important to be one in this case to commit after every line read
            .reader(reader()) // call reader method in same class
            .processor(new Processor())
            .writer(new Writer())
            .build();
}

 @Bean
public ItemReader<A> reader() {
   return new Reader();
}

请贴出 MercRepository.java 文件内容。

I'm not good at english, please show the content of file MercRepository.java.

新手上路,请多包涵

the value of mercRepository is null ,so you need to check MercRepository.java and find the reason

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题