当前位置: 首页 > 知识库问答 >
问题:

找不到Spring批处理命令行JobRunner。xml配置文件

伍宝
2023-03-14

我完全是Spring批处理框架的初学者,我从中找到了易于理解的代码http://www.javabeat.net/introduction-to-spring-batch/用作学习工具。我在Eclipse中设置了我的项目,类似于页面中的代码,它看起来如下:

代码执行fileWritingJob中的作业。xml使用CommandLineJobRunner,如下所示:

package net.javabeat.articles.spring.batch.examples.filewriter;

import org.springframework.batch.core.launch.support.CommandLineJobRunner;

public class Main {

    public static void main(String[] args) throws Exception {

        CommandLineJobRunner.main(new String[]{"fileWritingJob.xml", "LayeredMultiThreadJobTest"});
    }
}

它按预期运行,没有问题。但当我移动文件写入作业时。xml到另一个目录(仍在项目目录下)时,它不会运行。我尝试使用相对路径和完整路径更改CommandLineJobRunner方法的文件名参数,但它仍然无法运行。例如,如果在名为jobs的项目目录(与config级别相同)下创建一个目录,并将xml放入其中,然后将文件路径传递给CommandLineJobRunner,如下所示:

CommandLineJobRunner.main(new String[]{"/jobs/fileWritingJob.xml", "LayeredMultiThreadJobTest"});

还是这个

CommandLineJobRunner.main(new String[]{"../jobs/fileWritingJob.xml", "LayeredMultiThreadJobTest"});

这不管用。

但是当我尝试在config目录下创建一个subdir并将fileWritingJob放入时。xml,就像这样

CommandLineJobRunner.main(new String[]{"configsubdir/fileWritingJob.xml", "LayeredMultiThreadJobTest"});

它运行。这就好比命令行JobRunner只检查配置目录。

更新:经过仔细研究,多亏了Michael Minella对ClassPathXmlApplicationContext的建议,我能够将xml放在任何我想要的地方。我还查阅了Spring无法找到bean xml配置文件的页面,当它确实存在并且http://www.mkyong.com/spring-batch/spring-batch-hello-world-example/

所以我现在要做的是使用ClassPathXmlApplicationContext声明一个新的上下文,然后使用job launcher运行它,下面是如何:

public static void main(String[] args) {

    String[] springConfig  = 
        {   
            "file:/path/to/xml/file" 
        };

    ApplicationContext context = new ClassPathXmlApplicationContext(springConfig);

    JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
    Job job = (Job) context.getBean("JobName");

    try {

        JobExecution execution = jobLauncher.run(job, new JobParameters());
        System.out.println("Exit Status : " + execution.getStatus());

    } catch (Exception e) {
        e.printStackTrace();
    }

    System.out.println("Done");

  }

非常感谢您的所有投入!

共有2个答案

戚弘和
2023-03-14

可以指定相对于config目录的作业路径。例如,如果fileWritingJob.xml位于config/Jobs/目录中,则可以按如下方式执行作业:

CommandLineJobRunner.main(new String[]{"jobs/fileWritingJob.xml", "LayeredMultiThreadJobTest"});

同样,如果作业配置文件位于config目录之外,则可以编写:

CommandLineJobRunner.main(new String[]{"../fileWritingJob.xml", "LayeredMultiThreadJobTest"});

可以指定用于定位作业的绝对路径。

印振国
2023-03-14

将基于xml的作业定义的路径传递给CommandLineJobRunner时发生的一些细节。我们所做的就是将该字符串传递给ClassPathXmlApplicationContext的构造函数。因此,作业定义的xml文件应该位于应用程序的类路径上。我无法从你的项目屏幕截图判断你是如何构建项目的,所以我不确定配置目录是否在你的类路径上。但是,如果它位于类路径上并且位于其根目录下,我希望您能够将该路径传递给fileWritingJob。xml格式为“/config/fileWritingJob.xml”

调试此类问题时,此类的源代码可能会有所帮助。您可以在这里找到CommandLineJobRunner的源代码:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/CommandLineJobRunner.java

 类似资料:
  • 我试图在Spring中创建我的第一个bean,但是在加载上下文时遇到了一个问题。我在src/main/resources中有一个bean的配置XML文件。 线程“main”org.springframework.beans.factory.BeanDefinitionStoreException异常:IOException解析类路径资源[src/main/resources/beans.XML]中

  • 在本章中,我们来看一看一些经常使用的批处理命令。如下图中所示 - 编号 命令 描述 1 VER 此批处理命令显示正在使用的MS-DOS的版本。 2 ASSOC 这是将扩展名与文件类型(FTYPE)相关联的批处理命令,显示现有关联或删除关联。 3 CD 此批处理命令用于更改进入不同的目录,或显示当前目录。 4 CLS 这个批处理命令清除屏幕。 5 COPY 此批处理命令用于将文件从一个位置复制到另一

  • 我不知道如何使用调用Spring批处理中定义的作业,文档细节对我来说是不够的。 我遵循了Spring Batch官方指南,使用Java注释(例如)在Spring Batch中编写作业,因为我希望避免使用XML配置文件来描述作业、步骤等。 到目前为止我已经: 配置类(见下文),我使用AnnotaIon将定义、、、和(带有的所有内容放入其中。 具有方法的类,该方法具有并具有注释,以导入处理作业中的数据

  • 我有一个罐子x,它有一个类 现在在一个完全不同的项目中,我添加了这个jar作为依赖项。 并导入这个类,如: } 基本上,我在项目中使用了jar的Spring配置文件。 但当我运行我的应用程序时,我会出现以下错误: 信息:java。伊奥。FileNotFoundException:无法打开类路径资源[WEB-INF/assembly/appconfig.xml],因为它不存在。springframe

  • 我们正在处理一个Spring批处理项目(Spring Boot1.2.2.Release),要求使用Spring SFTP集成以一定频率轮询从服务器位置读取文件。我们使用java config实现了Spring批处理,并在使用Spring Integration java config的过程中实现了Spring批处理。我找不到描述上述情况的例子。我浏览了各种链接,但看到的主要是XML配置示例。 h