首页 > 解决方案 > 将 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-batch

解决方案


是的,一个 Spring 应用程序上下文可以包含多个作业定义。加载应用程序上下文后,您可以获取作业 bean 并根据需要启动它们。


推荐阅读