首页 > 解决方案 > 如何在没有 java 配置而不是 XML 的情况下使用 CommandLineJobRunner 启动 Spring 批处理

问题描述

我在 java 配置文件中有一个作业定义。当我尝试从 gradle 任务运行作业时,我得到 IOException parsing XML Document from class path。如何在没有 XML 配置的情况下使用 CommandLineJobRunner 运行作业?

摇篮

task executeJob(type: JavaExec) {
    main = 'org.springframework.batch.core.launch.support.CommandLineJobRunner'
    classpath = sourceSets.test.runtimeClasspath
    args = ["--job_path", "C:\\dev\\git\\ncf-bulk-order\\src\\main\\java\\com\\shelter\\NCFBulkOrder\\Jobs\\NCFBulkOrderConfig.java",
            "--job_id", "Response",
            "--next",
            "--customParam", "value"]
}

堆栈跟踪

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [--job_path]; nested exception is java.io.FileNotFoundException: class path resource [--job_path] cannot be opened because it does not exist
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
        at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:613)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:514)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at org.springframework.batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:290)
        at org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:565)
Caused by: java.io.FileNotFoundException: class path resource [--job_path] cannot be opened because it does not exist
        at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
        ... 14 common frames omitted

标签: spring-batch

解决方案


CommandLineJobRunner需要 XML 文件或 Java 配置类,其中包含定义您的作业的 Spring 应用程序上下文。这是一个带有 Java 配置类的示例:

java -cp your/class/path \
     org.springframework.batch.core.launch.support.CommandLineJobRunner \
     com.example.MyJobConfiguration \
     myJob

所以在你的命令中,你不需要传递--job_path标志。


推荐阅读