我正在尝试使用spring-batch在网络上的不同端点(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。
发布于 2020-08-25 15:45:45
Running Jobs from within a Web Container用一个代码示例解释了这一点。下面是一个例外:
@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();
}https://stackoverflow.com/questions/63567441
复制相似问题