com.example.demo.config.BatchLaunche 中找不到的字段 jobLauncher

Field jobLauncher in com.example.demo.config.BatchLaunche that could not be found

com.example.demo.config.BatchLauncher 中的 Field jobLauncher 需要找不到类型 'org.springframework.batch.core.launch.JobLauncher' 的 bean。

注入点有以下注解: - @org.springframework.beans.factory.annotation.Autowired(要求=真)

操作:

考虑在您的配置中定义类型为 'org.springframework.batch.core.launch.JobLauncher' 的 bean。

@Component
public class BatchLauncher {
    
    @Autowired
    private JobLauncher jobLauncher;
    
    @Autowired
    private Job job;

    public BatchStatus run() throws JobParametersInvalidException, JobExecutionAlreadyRunningException,
            JobRestartException, JobInstanceAlreadyCompleteException {
        JobParameters parameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis())
                .toJobParameters();
        JobExecution jobExecution = jobLauncher.run(job, parameters);
        return jobExecution.getStatus();
    }
}

你有很多方法可以解决,都是解决JobLuncher in Spring IOC container exception 说IOC cannot locate的问题JobLuncher class 的 bean 注入 BatchLuncher class,简单使用 @Autowired 根本不够,实际上你是在告诉 IOC JobLuncher class 的实例将被提供,但在编译时他无法找到要注入的实例,所以你需要提供它的一个实例。

  • @Service@Component 注释添加到 JobLuncher 的实现中。
  • 在@Config注解的一些自定义class中注入JobLuncherclass的实例,并通过@Bean注解JobLuncher的方法注入器进行IOC扫描。
    @Configuration
    public class JobLuncherConfig {
        @Bean
        public JobLuncher jobLuncher() {
        //return an implementation or concrete class of JobLuncher class-interface
          return new JobLuncher(...);
        }
    }

其实还有很多其他的方法,更多的是我建议更深入地了解Spring容器和控制反转,你可以从here开始。