对不起,但这对某些人来说可能是一个菜鸟问题,但它只是在我脑海中浮现,我觉得有必要修改我的想法并得到一些专家的相关解释。
我刚开始弹簧批量教程,我对这些应用程序的启动感到困惑。让我们在官方网站上采用这个例子
@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);
执行的。
答案 0 :(得分:1)
这是Spring中的控制反转(IOC或依赖注入)。基本上就是这样:
@SpringBootApplication
上的Application
告诉Spring它应该搜索Application
的包以及所有子包用于注释相关注释的类@Configuration
上的BatchConfiguration
注释是一个相关的注释,并告诉Spring该类包含有关应如何配置应用程序的信息。这意味着Spring将创建此类的实例并读取其上的所有属性和方法以搜索更多信息。@Autowired
中各个字段的BatchConfiguration
注释告诉Spring,在实例化此类时,这些字段应设置为适用的bean(注入)。@Bean
上的importUserJob
注释告诉Spring这个方法生成一个bean,这意味着Spring将调用此方法并将结果bean存储在Job
类型(以及任何接口)下/它继承的超类)和importUserJob
名称。 @EnableBatchProcessing
注释是一个元注释,它告诉Spring搜索其他包并导入其他配置类,以使请求注入的bean(注释为@Autowired
)可用。
IOC在开始时可以是一个非常先进的概念,Spring绝对不是最容易的IOC框架 - 虽然这是我个人的最爱 - 但是如果你想了解更多有关Spring Framework和IOC的建议我建议你首先阅读documentation,然后继续搜索教程。