在springbatch quartz设置中,我使用FlatFileItemReader读取CSV文件。我想设置读卡器的光标,以使用读卡器的给定参数启动下一个jobinstance。可能吗?
<bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<!-- Read a csv file -->
<property name="resource" value="classpath:cvs/input/report.csv" />
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="names" value="id,impressions" />
</bean>
</property>
<property name="fieldSetMapper">
<bean
class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
<property name="prototypeBeanName" value="report" />
</bean>
</property>
</bean>
</property>
</bean>
这样做的目的是继续读取下一次执行中上次失败的文件。我为customWriter中写入的每一行输入一个整数'writecursor'。
public void write(List<? extends Report> items) throws Exception {
System.out.println("writer..." + items.size() + " > ");
for(Report item : items){
System.out.println("writing item id: " + item.getId());
System.out.println(item);
}
//getting stepExecution by implementing StepExecutionListener
this.stepExecution.getExecutionContext().putInt("writecursor", ++writecursor);
}
现在,在自定义ItemReadListener中,我想获取更新写库值,然后跳过顶部的行开始从写库读取
public class CustomItemReaderListener implements ItemReadListener<Report>, StepExecutionListener {
ApplicationContext context = ApplicationContextUtils.getApplicationContext();
private StepExecution stepExecution;
@Override
public void beforeRead() {
//Skip lines somehow
}
我看到的另一个可能的解决方案是在项目阅读器中动态设置linestoskip。这里有一个线程http://thisisurl.com/dynamic-value-for-linestoskip-in-itemreader但还没有回答。这里,http://forum.spring.io/forum/spring-projects/batch/100950-accessing-job-execution-context-from-itemwriter
实现要跳过的行的一个更简单的方法是:
在xml中创建一个读取器平面文件读取器,将读取器自动连接到步骤执行侦听器的beforstep,如下所示
public class CustomStepListener implements StepExecutionListener {
@Autowired
@Qualifier("cvsFileItemReader")
FlatFileItemReader cvsFileItmRdr;
@Override
public void beforeStep(StepExecution stepExecution) {
System.out.println("StepExecutionListener -------- beforeStep");
cvsFileItmRdr.setLinesToSkip(4);
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
System.out.println("StepExecutionListener - afterStep");
return null;
}
}
这对我来说很好。。。。。
使用FlatFileItemReader.linesToSkip
属性设置注入作业参数值。
<bean id="myReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name="linesToSkip" value="file:#{jobParameters['cursor']}" />
</bean>
问题内容: 我的表中有一行我不想更改(曾经)。 是否可以将MySQL行设置为READ-ONLY,以便不能以任何方式更新它?如果是这样,怎么办? 如果不是,是否可以在该行的某一列中设置一个永久值,以使其无法更改?如果是这样,怎么办? 谢谢。 问题答案: 这可能是业务逻辑,可能不属于您的数据存储层。但是,仍然可以使用触发器来实现。 如果将要更新“锁定”记录,则可以创建引发错误的触发器;由于 在执行 该
问题内容: 我想知道如何逆转置成: 那么,如何只考虑值> 0 来转置结果in中的列? 问题答案: MySQL没有UNPIVOT函数,但是您可以使用将列转换为行。 基本语法为: 对于您的情况,您声明需要动态列的解决方案。如果真是这样,那么您将需要使用准备好的语句来生成动态SQL: 参见带有演示的SQL Fiddle
我正在使用React-useState创建状态为的对象。在成功调用API后,将更新为数据对象。 我有一个表单可以更改此状态,但我还有一个取消按钮。单击“取消”时,如何将此状态恢复为其初始值(API调用后)? 我应该创建另一个状态变量和存储初始状态在那里,然后更新我的状态基于?
问题内容: 我对此有一个文件模拟:… 我想从存在“ HDK1001”字样的行开始阅读,并在世界“ HDK7564”字样处结束阅读 我尝试使用此代码,但无法执行限制 请帮帮我 问题答案: 试试这个代码。
问题内容: 对于matlpotlib来说我还很陌生,我发现刻度线定位器和标签令人困惑,所以请多多包涵。我发誓我已经搜寻了几个小时。 我有一个这样的数据框“框架”(相关列): 其中,工作日名称是索引,而工作日编号是一列。此框架中没有日期时间对象。 我把这个变成了一个数字。 我需要将x轴用作数值,因为我想稍后添加一个散点图,这对于字符串值是不可能的。 这样可以 所以基本上我希望我的xticks是“ d
问题内容: Hai Guys,我想将光标设置在文本框上长度为14的位置,该位置将没有值。.我知道最初的光标将是0,但我希望它是14 问题答案: IE在设置光标位置时使用的方法与Firefox,Opera和Chrome不同。最好创建一个辅助函数,它将为您完成。我将其用于自己的需求。 最后一件事是从onfocus处理程序中调用它。 祝好运