前言
在上一章中Springboot快速搭建ftpserver服务端,我们快速搭建了一个简单的ftpserver服务,已经可以愉快的上传下载文件了,但是遇到一个问题,就是我们的ftp服务占用了很多端口,但是在springboot服务重启时,ftp服务占用的端口没有被销毁回收,导致端口已经被占用的错误,只要在上一章代码中修改一个地方就可以实现ftp跟随springboot一起重启并销毁回收占用的端口。
实现功能
- 跟随SpringBoot一起重启ftp服务,并回收ftp占用的端口
代码实现
只修改一处代码,就是上一章中的的“初始化FTP服务”
该类继承自ApplicationRunner类,会在springboot服务启动后自动启动。
在此类基础上实现Springboot的ApplicationListener事件监听方法onApplicationEvent即可。
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.ftplet.FtpException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.stereotype.Component;
/**
* 初始化ftp服务器
* @author 汤姆猫不是猫
*/
@Component
public class InitFtpServer implements ApplicationRunner, ApplicationListener<ContextClosedEvent> {
public static final Logger log = LoggerFactory.getLogger(InitFtpServer.class);
@Autowired
private FtpServer server;
@Override
public void run(ApplicationArguments args) throws Exception {
try {
server.start();
log.info("汤姆猫不是猫: ftp server start success ");
} catch (FtpException e) {
e.printStackTrace();
log.error("汤姆猫不是猫: ftp server start error {}", e);
}
}
}
/**
* 用于监听springboot关闭事件,达到跟随一起销毁ftp服务的目的
* @param event
*/
@Override
public void onApplicationEvent(ContextClosedEvent event) {
log.warn("汤姆猫不是猫: 监听到vmp-web程序将要关闭,准备销毁ftp服务");
if(server.isStopped()){
log.info("汤姆猫不是猫: ftp已经关闭");
}
log.info("汤姆猫不是猫: 准备关闭ftp");
server.stop();
if(server.isStopped()){
log.info("汤姆猫不是猫: ftp已经关闭");
}else{
log.warn("汤姆猫不是猫: ftp未及时关闭");
}
}
end
以上就是全部过程,是不是很简单。如果觉得博主写得还不错,欢迎“关注、点赞、收藏”一键三连!
本文介绍了如何在SpringBoot应用中集成FTP服务,并使其跟随SpringBoot一起重启,同时在服务关闭时正确释放占用的端口。通过修改`InitFtpServer`类,实现了FTP服务的自动启动和关闭监听,确保了端口资源的有效管理。
1746

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



