@Bean
@Qualifier("dataTransferJob")
public Job dataJob() {
return jobBuilderFactory.get("data-transfer-job")
.listener(jobExecutionListener())
.flow(step()).end().build();
}
@Bean
public Step step() {
return stepBuilderFactory.get("data-transfer-step")
.<TestData, TestDataVO>chunk(100)
.reader(reader())
.processor(process())
.writer(writer)
.taskExecutor(threadPool)
.transactionManager(transactionManager)
.listener(stepExecutionListener())
.listener(chunkListener())
.throttleLimit(10)
.build();
}
@PersistenceContext
private EntityManager em;
@Bean(destroyMethod="")
public ItemReader<TestData> reader() {
JpaPagingItemReader<TestData> itemReader = new JpaPagingItemReader<>();
try {
String sqlQuery = "SELECT * FROM TEST_DATA";
JpaNativeQueryProvider<TestData> queryProvider = new JpaNativeQueryProvider<TestData>();
queryProvider.setSqlQuery(sqlQuery);
queryProvider.setEntityClass(TestData.class);
queryProvider.afterPropertiesSet();
itemReader.setEntityManagerFactory(em.getEntityManagerFactory());
itemReader.setPageSize(100);
itemReader.setQueryProvider(queryProvider);
itemReader.afterPropertiesSet();
itemReader.setSaveState(true);
}
catch (Exception e) {
System.out.println("BatchConfiguration.reader() ==> error " + e.getMessage());
}
return itemReader;
}
使用CommandLineRunner处理工作
@Autowired
JobLauncher jobLauncher;
@Autowired
@Qualifier("dataTransferJob")
Job dataJob;
JobParametersBuilder paramsBuilder = new JobParametersBuilder();
paramsBuilder.addString("date", LocalDateTime.now().toString());
JobExecution jobExecution=jobLauncher.run(dataJob, paramsBuilder.toJobParameters());
在Spring Batch中,作业实例由(标识)作业参数标识。请查看批处理的域语言部分,以了解作业
、JobInstance
和JobExecution
概念之间的区别,以及如何使用参数来标识作业实例。
我试图在进程中间停止批处理并重新运行。它总是执行一个新的工作。
在您的示例中,由于您在每次运行时都将当前时间添加为作业参数,因此:
JobParametersBuilder paramsBuilder = new JobParametersBuilder();
paramsBuilder.addString("date", LocalDateTime.now().toString());
我知道spring-batch-admin是不推荐的。但是,我们现在不能使用spring-cloud-data-flow。是否有其他替代方案来监控和按需重启作业?
清除Spring表的最佳方法是什么? Spring是否提供任何用于清除的API?或者,我们是否需要对所有Spring批处理表执行delete语句?
我希望将Spring Batch与RabbitMQ集成。我已经开发了如下代码,但是没有数据通过通道。代码中有什么问题? hannel.java 顾客JAVA CustomerFieldSetMapper。JAVA JobConfig。JAVA 应用属性 顾客csv SpringBatchAmqpApplication.java
问题内容: 我想批量重命名目录中的多个文件,以便从文件名中删除前面的数字和连字符。 如何使用linux命令执行此操作? 问题答案: 这应该使它: 它从块的开头(即数字)开始多次,然后连字符并将其从文件名中删除。 如果不在您的计算机中,则可以使用循环和: 测试 要么:
我们在Spring批处理块分区架构的基础上编写了一个批处理基础框架。(主从并行处理模型)[1]
我怎样才能停止一个工作在Spring批次?我尝试使用下面的代码来使用这个方法: 我尝试也完成了,失败了,但这个方法不工作,作业继续执行。有解决办法吗?