我创建一个由groovy bean builder支持的spring批处理(spring-boot)。但是,我无法找到以下xml构造的正确语法:
<batch:job-repository/>
更新: beans.groovy
beans {
xmlns([ctx: 'http://www.springframework.org/schema/context', batch: 'http://www.springframework.org/schema/batch'])
ctx.'component-scan'('base-package': 'mypackage')
ctx.'annotation-config'()
itemReader(MyItemReader) {}
itemProcessor(MyItemProcessor) {}
itemWriter(FlatFileItemWriter) { ... }
batch.job(id: 'job1') {
batch.step(id: 'step1') {
batch.tasklet {
batch.chunk(
reader: 'itemReader',
writer: 'itemWriter',
processor: 'itemProcessor',
'commit-interval': 1
)
}
}
}
//Option 1: will this work?
//batch.'job-repository'()
//Option 2: all job related beans defined individually, because cannot get <batch:job-repository/> in groovy bean syntax
jobRepository(MapJobRepositoryFactoryBean) {
transactionManager = ref('transactionManager')
}
jobRegistry(MapJobRegistry) { }
jobLauncher(SimpleJobLauncher) {
jobRepository = ref('jobRepository')
taskExecutor = { SyncTaskExecutor executor -> }
}
jobExplorer(JobExplorerFactoryBean) {
dataSource = ref('dataSource')
}
jobOperator(SimpleJobOperator) {
jobLauncher = ref('jobLauncher')
jobRepository = ref('jobRepository')
jobRegistry = ref('jobRegistry')
jobExplorer = ref("jobExplorer")
}
}
我想使用选项1技术,如果我这样做,我得到'beanName一定不能为空'错误。我没有使用选项2中的bean,而是使用它们。
我假设使用选项1,将使用其他定义的bean自动配置jobRepository等。
答案 0 :(得分:0)
我为命名空间选项添加了Jira ticket。但是,当您将注释与Groovy DSL结合使用时,您也可以按照Spring Boot Batch中的示例解决它:
如果您有应用程序类,可以使用@EnableBatchProcessing
对其进行注释以获取所请求的行为:
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.builder.SpringApplicationBuilder
import org.springframework.context.annotation.ComponentScan
@ComponentScan
@EnableAutoConfiguration
@EnableBatchProcessing
public class Application
{
public static void main(String[] args)
{
new SpringApplicationBuilder(Application.class, "appcontext.groovy").run(args)
}
}
但是,您没有在一个地方进行所有配置。