我一直在为Spring Batch使用Xml配置,感觉它更简单,更简洁。但是,现在人们建议使用javaconfig而不是xml。我用Google搜索了这个话题。
此网站告诉我们为什么javaconfig更好https://blog.codecentric.de/en/2013/06/spring-batch-2-2-javaconfig-part-1-a-comparison-to-xml/
选择javaconfig而不是xml的主要原因:
此网站告诉我们为什么xml更好https://dzone.com/articles/consider-replacing-spring-xml
选择xml而非javaconfig的主要原因
我得出结论,如果您正在创建独立的批处理作业,并且您没有通过与Spring Batch集成来创建任何新框架,那么仍然可以使用xmls。
我错过了xmls的任何缺点吗?
答案 0 :(得分:1)
让我在这个主题上添加一些额外的想法。
使用javaconfig时我真正喜欢的是能够动态创建作业。例如,您可以使用带有文件名的输入参数,然后通过为每个接收到的文件名创建一个步骤来创建一个并行执行读取和处理此文件的作业。 (使用MultiResourceItemReader将按顺序执行此操作)。此外,根据inputparameter,您还可以不同地定义作业流程。
我对你在javaconfig上选择xml的原因的看法: 第1点:这在我看来并不重要。您可以拥有自己的配置类,也可以定义自己的包。你甚至可以将它们放在自己的模块中。这只是一个问题,如何组织代码。
第2点:再次,这也不算数。您可以根据需要在多个类中拆分配置。您可以使用@Import和@ContextScan注释将您想要的内容集成到上下文中。
第3点:如果你是按类而不是通过接口来实现的,那么自动装配也可以非常明确。此外,您还可以直接调用@Bean注释的方法。一个例子:
@Configuration
public MyBeanFactory {
@Bean
public MyBeanInterface bean1() {
return ...;
}
@Bean
public MyBeanInterface bean2() {
return ...;
}
}
@Component
public MyBeanuser {
@Autowired
private MyBeanFactory beanFactory;
@PostConstruct
public void afterPropertiesSet() {
// this will actually set the bean that was created an registered in the
// spring context and not simply call the the method and create a new
// instance. So this wiring is very explicitly
setProperty1(beanFactory.bean1());
setProperty2(beanFactory.bean2());
}
最后,我想这也是一个品味问题。我在春季批次的背景下使用xml-configuration超过5年。两年前,我们完全转而使用javaconfig而不是xml。老实说,我还没有找到一个我应该回去使用xml的原因。然而,这是我的“品味问题”。