首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring-batch动态读取文件

spring-batch动态读取文件
EN

Stack Overflow用户
提问于 2020-08-25 03:19:58
回答 1查看 599关注 0票数 0

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

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

我曾尝试添加"spring.batch.job.enabled=false“来停止spring-batch的自动启动,但我担心的是,我应该在哪里设置将提供给ItemReader的资源行:

代码语言:javascript
复制
FlatFileItemReader<String> reader = new FlatFileItemReader<String>();
reader.setResource(someResource);

因为在设置资源的过程中,我得到了NullPointerException

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-25 15:45:45

Running Jobs from within a Web Container用一个代码示例解释了这一点。下面是一个例外:

代码语言:javascript
复制
@Controller
public class JobLauncherController {

   @Autowired
   JobLauncher jobLauncher;

   @Autowired
   Job job;

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

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

代码语言:javascript
复制
@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);
}

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

代码语言:javascript
复制
@StepScope
@Bean
public FlatFileItemReader flatFileItemReader(@Value("#{jobParameters['url']}") URL url) {
   return new FlatFileItemReaderBuilder<String>()
        .resource(new UrlResource(url))
        // set other properties
        .build();
}

这在Late Binding of Job and Step Attributes一节中有解释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63567441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档