@SpringBootApplication
@EnableBatchProcessing
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
使用此配置,我可以从命令行运行作业:
java -jar batch.jar --spring.batch.job.names=job1ToRun
如何使用类似的机制为每次运行启动一个新实例?我需要从命令行指定作业名称来选择要运行的作业。
来自spring-batch文档
CommandLineJobRunner
因为启动作业的脚本必须启动Java虚拟机,所以需要有一个具有main方法的类来充当主要入口点。Spring Batch提供了一个实现,该实现正好用于此目的:CommandLineJobrunner。需要注意的是,这只是引导应用程序的一种方法,但是启动Java进程的方法有很多种,这个类绝不应该被视为权威的。CommandLineJobRunner执行四个任务:
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
JobLauncher jobLauncher = ctx.getBean(JobLauncher.class);
String jobName = args[0] // assuming args[0] is the jobName
JobParameters jobParameters = createJobParameters(args)
Job jobInstance = ctx.getBean(jobName, Job.class);
jobLauncher.run(jobInstance, jobParameters);
}
private static JobParameters createJobParameters(String[] args) {
// TODO: Create & return the needed parameters
}
想法是,如果已经运行相同的作业,则不要启动作业。 作业资源管理器是简单注入到类中,其中是用于运行的计划方法 然后它被执行 这不是解决方案,因为如果JVM在作业运行时停止,这将与当前作业运行相同: 它将找到所有带有exitCode的作业ExitStatus.UNKNOWN. 在我看来,有3种解决方案: 解决方案一: 停止以前运行的未完成作业并运行新作业PROS:一切都干净,只有一个属性 续:失去当前
我已经将我的Spring批处理配置为每当通过API调用从UI发出请求时触发作业。我面临的问题是,该作业仅在第一次和其他尝试时工作正常,每当调用时,作业不会以预期的方式响应。似乎他们正在尝试恢复,但我想再次重新启动整个执行。感谢您提前提供的任何帮助。 主要的班 配置班 JobListener.class 我的听众。班 Controller.class 应用属性 首次发出API请求时的响应 其他时间的
我有一个带有cron作业spring boot项目。作业只应运行一次。它应该再次触发,只有当应用程序崩溃或应用程序重新启动。对此有什么cron表达式吗?或者有什么办法可以实现这一点?
问题内容: 我每天如何每六个小时运行一次命令?试过这不起作用: 问题答案: 您忘记了,并且您有太多字段,这是您需要关心的时刻 这意味着每6小时从0开始,即在0、6、12和18小时,您可以将其写为
问题内容: 我希望添加一个条目,以每隔30分钟,每小时的零零几点和接近小时的30分钟执行一次脚本。我有以下内容,但它似乎无法在0上运行。 我需要使用什么字符串? cron在OSX上运行。 问题答案: 做:
问题内容: 我需要设置一个cron作业,每小时运行一次使用gcc编译的可执行文件。 我以root用户身份登录并输入 然后我输入以下内容并保存文件。 但是,cron作业不起作用。 我看到当我输入文字时会遇到细分错误。我只能从可执行文件所在的文件夹中执行该可执行文件。有什么办法可以解决此问题? 问题答案: 除非有其他需要设置的程序才能运行,否则它应该可以正常工作。