在我的Spring批处理配置中,我试图设置一个分区步骤,该步骤访问JobParameters中的值,如下所示:
@Bean
@Qualifier("partitionJob")
public Job partitionJob() throws Exception {
return jobBuilderFactory
.get("partitionJob")
.incrementer(new RunIdIncrementer())
.start(partitionStep(null))
.build();
}
@Bean
@StepScope //I'm getting exception here - > Error creating bean
public Step partitionStep(
@Value("#{jobParameters[gridSize]}") String gridSize)
throws Exception {
return stepBuilderFactory
.get("partitionStep")
.partitioner("slaveStep", partitioner())
.gridSize(
StringUtils.isEmpty(gridSize) ? 10 : Integer
.parseInt(gridSize))
.step(slaveStep(50000))
.taskExecutor(threadPoolTaskExecutor()).build();
}
@Bean
@StepScope
public Step slaveStep(int chunkSize) throws Exception {
return stepBuilderFactory
.get("slaveStep")
.<Person,Person> chunk(chunkSize)
.reader(jdbcPagingItemReader()),
.writer(csvFileWriterParts())
.listener(stepExecutionListener()).build();
}
我已经将@EnableBatchProcessing注释添加到我的SpringBoot应用程序中。
但是如果我在partitionStep上使用StepScope注释,我会得到
创建名为“ScopedTarget.PartitionStep”的bean时出错:当前线程的作用域“step”不活动;如果您打算从单例引用这个bean,请考虑为它定义一个有作用域的代理;嵌套异常是java.lang.IllegalStateException:没有可用于步骤范围的上下文保持器
但是如果我将它更改为JobScope,那么它将在slaveStep()处失败,并出现相同的错误消息。
在这种情况下使用的正确范围是什么?如何解决这个问题?
在配置spring Bean时访问JobParameters的更好方法是什么?
异常堆栈如下
如果我修改到JobScope,我在slaveStep上得到异常,它与上面的异常类似。
使用Spring boot时请尝试选项Spring批处理范围问题,由Manh发布。我猜它解决了问题。不幸的是,我不再有权访问代码库,以确认我为修复做了什么。
在我的Spring批处理配置中,我试图设置一个分区步骤,该步骤访问JobParameters中的值,如下所示: 我已经向SpringBoot应用程序添加了@EnableBatchProcessing注释。 异常堆栈如下所示 2018-05-25 21:07:32,075 ERROR[main]org.springframework.batch.core.job.abstractJob:执行作业or
当批处理在服务器启动时运行时不会出现上述异常。但只有在24小时后调用批处理时才会发生。为什么会这样?如果出现异常,那么即使批处理在(IBM websphere)服务器启动时运行,也应该出现异常。为什么会话在服务器启动时可用,甚至在应用程序完全启动之前,没有人使用它? 在我们将bean定义为会话/请求范围的地方,但我们在服务器启动期间使用这些beans(还没有发出会话或请求),为什么spring不会
我把它叫做: 也从这里打电话:
为了在请求、会话和全局会话级别支持bean的范围(Web范围bean),在定义bean之前需要进行一些次要的初始配置。 我在中添加了以下内容,如文档所示: 2.将bean限定为依赖项 org.springframework.beans.factory.BeanCreationException:创建名为“ScopedTarget.ReportBuilder”的bean时出错:当前线程的作用域“se
反正可以禁用SQL,我只是想测试我的读写器和处理器工作正常。
如果BATCH_JOB_EXECUTION_CONTEXT没有创建,我得到的结果是: 由:org.springframework.jdbc.badsqlgrammareXception:PreparedStatementCallback;错误的SQL语法[插入BATCH_JOB_EXECUTION_CONTEXT(SHORT_CONTEXT,SERIALIZED_CONTEXT,JOB_EXECU