我正在尝试使用网络上的spring-batch在不同的端点(PC,S3,Dropbox,Google驱动器)之间传输任何文件(视频,txt等)。为此,我正在获取包含要传输的文件位置(URL)列表的json文件(假设我可以访问这些位置)。
那么,一旦我的控制器被点击(在哪个作业中创建),而不是在启动spring-boot应用程序时,如何告诉读者读取输入呢?
我试过添加“ spring.batch.job.enabled = false”,它会阻止spring-batch自动启动,但是我担心的是我应该在哪里写设置将提供给ItemReader的资源行:
FlatFileItemReader<String> reader = new FlatFileItemReader<String>();
reader.setResource(someResource);
因为在设置资源的过程中,我得到了NullPointerException
。
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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句