前言:项目中数据传输使用到了文件传输平台,类似于一个FTP服务器。所以需要使用到FTP协议进行文件下载,原本的计划是使用SFTP下载,但是出于各种原因没有按计划执行,反正都一样。下面来讲一下具体需求和实现。
应用场景
该项目为银行的总账系统,顾名思义;总账系统主要用于查账,调账和预估收益,而这些账单数据则是由各外围系统(其他系统)传递过来,所以就有了文件传输平台,因而需要文件下载。
需求&方案
原本需求:各外围系统不定时的将文件上传至FTP服务器(文件传输平台)的指定目录,总账系统实时下载这些文件到自己的应用服务器,而总账有两台集群的应用服务器。那么该将如何从FTP服务器下载文件呢?于是就有了下面的两种方案。注意:文件下载程序是为了后续的导数程序提供数据文件,总账系统数据采用的是oracle RAC双机热备方案(即两台oracle服务器共享存储)。
- 两台服务器共享一个NAS存储,只从文件服务器下载一份文件到共享目录下。
- 两台服务器都下载文件到各自的独有的目录下。
对于方案2来说需要注意文件下载程序和导数程序有可能运行在不同的服务器上。譬如说A服务器运行了文件下载程序,B服务器运行导数程序时发现没有需要导入的文件,那么整个系统就会出现一种“死锁状态”,所有需要确保文件下载程序在两台服务器上都运行。而基于现有的条件无法实现,所以最终选择的是第一种方案。
技术实现
对于FTP文件下载,市面上有着很多成熟的工具,此处选择Apache提供的一个工具包——commons-net.jar,目前最新版本是3.8.0。使用起来也是很简单,具体下载参考下面代码:
/**
* 1、简单任务示例(Bean模式)
*/
@XxlJob("downFtpFileJobHandler")
public void downFtpFileJobHandler() {
String acct = "20220222";
FTPClient ftpClient = new FTPClient();
// 指定本地下载目录
String localPath = "D:\\Users\\zbw\\Desktop\\snbank\\" + acct + "\\";
File localDir = new File(localPath);
if(!localDir.exists()){
localDir.mkdir();
}
try {
ftpClient.connect("192.168.0.102", 21);
boolean loginSuccess = ftpClient.login("xxx", "123456");
if <

本文介绍了在银行总账系统中使用FTP协议下载文件的场景和需求,选择了Apache的commons-net.jar工具进行实现。文章详细展示了如何通过FTPClient进行文件下载,包括主动模式与被动模式的区别,并提出了下载策略的两种思路。最终由于网络和服务器配置问题,选择了被动模式避免文件下载问题。此外,还讨论了方案选择和问题分析的重要性。
最低0.47元/天 解锁文章
353

被折叠的 条评论
为什么被折叠?



