Haw spring批处理应用程序已启动

时间:2017-11-09 13:39:22

标签: spring-boot spring-batch

对不起,但这对某些人来说可能是一个菜鸟问题,但它只是在我脑海中浮现,我觉得有必要修改我的想法并得到一些专家的相关解释。

我刚开始弹簧批量教程,我对这些应用程序的启动感到困惑。让我们在官方网站上采用这个例子

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired
    public DataSource dataSource;


    // tag::jobstep[]
    @Bean
    public Job importUserJob(JobCompletionNotificationListener listener) {
        return jobBuilderFactory.get("importUserJob")
                .incrementer(new RunIdIncrementer())
                .listener(listener)
                .flow(step1())
                .end()
                .build();
    }

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
                .<Person, Person> chunk(10)
                .reader(reader())
                .processor(processor())
                .writer(writer())
                .build();
    }
    // end::jobstep[]
}

,这是配置类

main()

这里提到SpringApplication.run()方法使用Spring Boot的importUserJob方法来启动应用程序。

我不清楚这个工作是public static void main(String[] args) { GenericApplicationContext context = new AnnotationConfigApplicationContext(MyBatchConfiguration.class); JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher"); Job job = (Job) context.getBean("myJobName");//this is bean name of your job JobExecution execution = jobLauncher.run(job, jobParameters); } 被执行了 没有明确的代码显示haw我们开始这个工作,它只是一个配置部分(声明)。

另一方面,我发现另一个例子是如何启动这样的spring应用程序:

jobLauncher

我可以理解,该作业是使用printf("%d",(*(*out)).num);执行的。

1 个答案:

答案 0 :(得分:1)

这是Spring中的控制反转(IOC或依赖注入)。基本上就是这样:

  1. @SpringBootApplication上的Application告诉Spring它应该搜索Application的包以及所有子包用于注释相关注释的类
  2. @Configuration上的BatchConfiguration注释是一个相关的注释,并告诉Spring该类包含有关应如何配置应用程序的信息。这意味着Spring将创建此类的实例并读取其上的所有属性和方法以搜索更多信息。
  3. @Autowired中各个字段的BatchConfiguration注释告诉Spring,在实例化此类时,这些字段应设置为适用的bean(注入)。
  4. @Bean上的importUserJob注释告诉Spring这个方法生成一个bean,这意味着Spring将调用此方法并将结果bean存储在Job类型(以及任何接口)下/它继承的超类)和importUserJob名称。
  5. 对构建作业的进一步注释将触发Spring的其他操作。它可能包含注释,告诉Spring运行各种函数,将它连接到某些事件。或者另一个bean请求所有Job实例,并在它告诉Spring执行的方法中使用它来做任务。
  6. @EnableBatchProcessing注释是一个元注释,它告诉Spring搜索其他包并导入其他配置类,以使请求注入的bean(注释为@Autowired)可用。

    IOC在开始时可以是一个非常先进的概念,Spring绝对不是最容易的IOC框架 - 虽然这是我个人的最爱 - 但是如果你想了解更多有关Spring Framework和IOC的建议我建议你首先阅读documentation,然后继续搜索教程。