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