我正在用Spring Batch开发使用Spring Boot。
我使用了Spring Boot提供的最小配置,并定义了一些作业(根本没有XML配置)。但当我运行应用程序时,
SpringApplication.run(App.class, args);
作业按任意顺序依次执行。
我在@configuration
注释类中以这种方式定义作业,其余的由Spring完成:
@Bean
public Job requestTickets() {
return jobBuilderFactory.get(Config.JOB_REQUEST_TICKETS)
.start(stepRequestTickets())
.build();
}
编辑:这个警告能给出一个提示吗?(也许没什么可做的)
2016-12-29 17:45:33.320 WARN 3528 --- [main] o.s.b.c.c.a.DefaultBatchConfigurer: No datasource was provided...using a Map based JobRepository
1.首先通过在Application.Properties中指定spring.batch.job.enabled=false
来禁用自动作业启动
2.在主类中,do-applicationcontext ctx=springapplication.run(SpringBatchMain.class,args);
,假设主类名为-springBatchMain.java。
这将在不启动任何作业的情况下初始化上下文。
3.初始化上下文后,您可以执行-joblauncherjoblauncher=(jobLauncher)ctx.getBean(“jobLauncher”);
或在main类中为这个jobLauncher bean执行autowired
并通过调用,jobLauncher.run(job,jobParameters)
按特定顺序依次启动特定作业。
您可以从步骤2初始化的上下文中获取特定的job
实例。
始终可以使用任何有序集合将作业放在那里,并通过迭代该集合启动作业。
4.只要将JobLauncher配置为同步,上述技术就可以工作,即主线程等待JobLauncher.run()
调用完成,这是JobLauncher的默认行为。
如果您已经将jobLauncher定义为使用AsyncTaskExecutor,那么作业将并行启动,并且不会保持顺序排序。
希望有帮助!!
编辑:
正如Stephane Nicoll所指出的,我正在试验@order
注释,它似乎只有助于创建有序的作业集合,并且您可以按照该顺序迭代和启动作业。
@Component
public class MyJobs {
@Autowired
private List<Job> jobs;
public List<Job> getJobs() {
return jobs;
}
}
@Bean
public MyJobs myJobs() {
return new MyJobs();
}
问题内容: 运行main方法时,将执行作业。这样我无法弄清楚如何控制作业的执行。例如,您如何安排作业,访问作业执行或设置作业参数的方式。 我试图注册自己的JobLauncher 但是当我尝试在主要方法中使用它时: 当加载上下文时,该作业再次执行,而当我尝试手动运行它时,我得到了。有没有办法防止自动作业执行? 问题答案: 通过设置可以防止作业执行 在application.properties中。或
我按照这个示例使用Boot进行Spring批处理。 运行main方法时,作业将执行。这样我就不知道如何控制作业的执行了。例如如何排定作业、访问作业执行或设置作业参数。 我尝试注册自己的JobLauncher 但当我尝试在主法中使用时: 当加载上下文时,再次执行作业,并且尝试手动运行作业时得到。有没有办法防止自动执行作业?
我有一个作业流,我希望以以下方式运行它: 作业流将从Job1开始。在Job1成功完成后,Job1将同时启动Job2和Job4。 Job2和Job4将并行运行。 在Job2成功完成后,Job2将启动Job3。 在Job4成功完成后,Job4将启动Job5。 下面是job1.xml和job1的作业启动器类的代码片段: job1.xml uijobLauncher.java “job2,Job3”对和“
我在BatchScheduler中有多个计划作业,它在特定时间运行。简单的内置JobLauncher,这是同步的。在自然界中最初使用。现在,我想并行运行这些作业,这样没有作业可以等待其他作业完成。 我在不同的作业上尝试过@Async注释,但都不起作用。 然后,我尝试设置joblauncher.settaskexecutor(新的SimpleAsyncTaskExecutor())。但这并不奏效。
我正在使用spring批处理读取CSV文件并使用controller触发器将其写入DB。在启动应用程序时,在我从浏览器url中点击之前,我会在启动时看到来自阅读器的打印语句。虽然它不为我的处理器或写入器打印它,它们是在单独的类中,我已经自动连线。是因为读者是豆子吗?
到目前为止,我正在运行spring批处理,只有一个作业。现在我想运行多个不同的作业,这意味着不同的功能。在我的配置文件中,我配置了两个具有不同id和不同名称的作业。现在我得负责这些工作。你能告诉我怎么跑吗。在这里,我的疑问是在我的java类中,我已经为运行批处理编写了这段代码。 对于其他作业,如何调用jobLauncher的run方法。 我的配置文件是