我有一个Spring Boot批处理应用程序,需要每天运行。它会读取一个每日文件,在数据上进行一些处理,并将处理后的数据写入数据库。在此过程中,应用程序会保存一些状态,例如要读取的文件(存储在
调度的一个选项是使用Spring的
这里的问题在于状态会在运行之间被保留。因此,我必须更新要读取的文件、当前运行的日期和时间、清除缓存的文件数据等等。
另一个选项是通过Unix Cron作业运行应用程序。这显然可以满足在运行之间清除状态的需求,但我更喜欢将作业调度与应用程序绑定,而不是与操作系统绑定(并且偏爱它对操作系统不可知)。@Scheduled 运行之间是否可以重置应用程序状态?
FlatFileItemReader
和JobParameters
中),运行时的当前日期和时间,一些用于比较读取项的文件数据等。调度的一个选项是使用Spring的
@Scheduled
,如下所示:@Scheduled(cron = "${schedule}")
public void runJob() throws Exception {
jobRunner.runJob(); //runs the batch job by calling jobLauncher.run(job, jobParameters);
}
这里的问题在于状态会在运行之间被保留。因此,我必须更新要读取的文件、当前运行的日期和时间、清除缓存的文件数据等等。
另一个选项是通过Unix Cron作业运行应用程序。这显然可以满足在运行之间清除状态的需求,但我更喜欢将作业调度与应用程序绑定,而不是与操作系统绑定(并且偏爱它对操作系统不可知)。@Scheduled 运行之间是否可以重置应用程序状态?
step
或者prototype
作用域。虽然可能可行,但与使用Unix cron相比似乎很繁琐。我还尝试了在主应用程序类中使用定时静态runJob
来刷新上下文。但是这样做会导致GenericApplicationContext不支持多次刷新尝试
的错误。 - undefined