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

在spring-batch中动态读取文件

蔚和风
2023-03-14

我正在尝试在网络上使用spring-batch在不同的endpoint(pc,s3,dropbox,google drive)之间传输任何文件(视频,txt等)。为此,我将获得包含要传输的文件位置(url)列表的json文件(假设我可以访问这些位置)。

那么,当我的控制器被击中(在其中创建作业)而不是在启动spring-boot应用程序的时候,我如何告诉阅读器读取输入呢?

我已经尝试添加“spring.batch.job.enabled=false”,它可以停止spring-batch自动启动,但我关心的是应该在哪里编写设置将提供给ItemReader的资源行:

FlatFileItemReader<String> reader = new FlatFileItemReader<String>();
reader.setResource(someResource);

因为在设置资源期间,我将获得NullPointerException

共有1个答案

仇睿
2023-03-14

从Web容器中运行作业通过一个代码示例解释了这一点。这里有一个例外:

@Controller
public class JobLauncherController {

   @Autowired
   JobLauncher jobLauncher;

   @Autowired
   Job job;

   @RequestMapping("/jobLauncher.html")
   public void handle() throws Exception{
    jobLauncher.run(job, new JobParameters());
   }
}

在您的示例中,需要从请求中提取文件名并将其作为作业参数传递,类似于:

@RequestMapping("/jobLauncher.html")
public void handle() throws Exception{
   URL url = // extract url from request
   JobParameters parameters = new JobParametersBuilder()
        .addString("url", url)
        .toJobParameters();
   jobLauncher.run(job, parameters);
}

然后使读取器具有步进作用域,并从作业参数中动态提取文件:

@StepScope
@Bean
public FlatFileItemReader flatFileItemReader(@Value("#{jobParameters['url']}") URL url) {
   return new FlatFileItemReaderBuilder<String>()
        .resource(new UrlResource(url))
        // set other properties
        .build();
}
 类似资料:
  • 我有两个输入文件,分别是File1和File2。File1包含部分记录,其余部分记录分散到File2,为了创建一条记录,我需要同时读取File1和File2。每条记录的唯一键将位于记录之前的File1和File2中。请您帮助我们如何使用Spring batch reader实现此功能。

  • 我正在使用使用按顺序读取文件。 我想创造一个读者 从文件1读取chunksize 现在,MultiResourceItemReader的问题是,它将首先分块读取完整的文件1,当文件完成时,它将继续读取文件2。 如何创建基于块大小在文件之间切换的批处理步骤?

  • 到目前为止,我的方法是: 挑战是:不能使用。如何正确使用?

  • 问题内容: 我想配置为顺序读取特定文件夹内的所有文件。 由于委托将尝试打开一个名为的文件,因此以下内容无效,这当然是无效的。我要在这里更改什么? 等效的xml配置将编写如下,如何将其重写为仅Java的配置? 问题答案: 我认为您应该使用。

  • 我正在尝试制作一个Spring批处理作业, Reader从数据库读取一个项目 Processor创建项目列表 UnpackingItmeWriter接受项目列表,并将单个项目发送给FlatFileItemWriter<下面是我的代码。我从这个答案中得到了这个答案。我在这个配置中没有做正确的事情,因为当我运行它时,作业甚至没有启动。请给我指出正确的方向。 编辑:printStack

  • 我有一个Thymeleaf模板,用于在Java应用程序中生成字符串类型的XML文档。 我正在使用胸腺叶。上下文和thymeleaf。TemplateEngine对象通过Map接口读取我的变量。 我能够很好地读取所有的值,除了我在文档顶部附近设置xi: schemaPlace标签时遇到了麻烦。注意-xmlValue是上下文变量的名称,上下文变量是一个映射,其中包含指向String对象的键“Schem