将Spring作业提交到相同的Spring上下文

时间:2018-11-30 07:13:02

标签: spring-batch

是否可以在独立的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]);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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