spring-batch - 将 Spring 作业提交到相同的 Spring 上下文
问题描述
是否可以在独立 JVM 中加载 Spring 上下文并将所有 Spring 批处理提交到加载的 Spring 上下文?
我试图避免为每个弹簧作业提交加载弹簧上下文,因为我有需要很长时间才能加载的资源,这最终会减慢弹簧上下文的加载速度。
我在类的主要方法中有以下代码。我通过 CLI 通过传递要调用的作业名来调用该类
public class SpringBatchJobRunner {
public static void main(String[] args) {
try {
parseArguments(args);
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:com/demo/batch/context/spring-batch-context.xml");
JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean(jobName);
JobParametersBuilder builder = new JobParametersBuilder();
builder.addDate("date", new Date());
JobExecution execution = jobLauncher.run(job, builder.toJobParameters());
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
static void parseArguments(String[] args) {
if (args.length > 0) {
jobName = args[0];
}
else {
throw new IllegalArgumentException("Please specify job name.");
}
if (args.length > 1) {
for (int i = 1; i < args.length; i++) {
String[] keyValue = args[i].split("=");
jobParameters.setProperty(keyValue[0], keyValue[1]);
}
}
}
}
解决方案
是的,一个 Spring 应用程序上下文可以包含多个作业定义。加载应用程序上下文后,您可以获取作业 bean 并根据需要启动它们。
推荐阅读
- sql - Regexp_extract 出现“-q_”后的所有内容
- python - 如何使用 imageio 修复 mimwrite raise RuntimeError("Zero images werewritten.")?
- javascript - 无法删除空格(在使用 lettering.js 拆分 div 之后)
- docker - pip install 不能从 dockerfile 工作
- python-3.x - 遍历文件夹/子目录并将找到的正则表达式文件移动到新文件夹中
- amazon-s3 - 将对象写入 S3 时可以设置超时吗?
- c - 在 Visual Studio Code 中编译 C 程序时出错
- visual-studio-code - 无法在 monaco-editor 的模型配置中填写 rootUri 和 rootPath 字段
- pandas - 在 pandas 中将日期转换为 int
- go - GORM Database.First(&tableStruct, id) without deleted_at IS NULL