我目前正在编写一个弹簧批,它应该将我的应用程序中的所有文件传输到共享位置。批处理包含一个步骤,其中包括读取byte []的读取器,将其转换为pdf的处理器以及在共享位置创建新文件的编写器。
1)由于它的IO绑定操作应该在我的批处理中使用ThreadPoolTaskExecutor吗?使用它会导致数据丢失吗?
2)同样在我的ItemWriter中,我正在使用FileOutputStream编写。我的服务器在巴黎,共享位置在纽约。因此,在这种情况下编写文件时,有没有更好或更有效的方法来实现这一目标,最少延迟?
提前致谢
答案 0 :(得分:0)
1)如果你可以将IO绑定操作分离到自己的线程和其他部分到自己的线程中,你可以采用多线程方法。如果写得正确,数据不会丢失。 一种方法可以如下:
2)所以这是一个映射的网络共享?那时你可以用Java做的事情不多。但在你担心它之前,你应该确保它是一个实际问题而不是过早优化。
答案 1 :(得分:0)
我猜你可以通过分区来完成上述任务。使用两种方法创建主步骤,使用多线程返回文件路径和从属任务。
而不是使用FileOutputStream将FileChannel与BufferedRead / Write一起使用,它具有更好的性能
我建议第二个,它总是更好地使用lib而不是使用自定义代码