很多同学在把 Apache Mina 整合进 Spring Boot 时,容易忽略容器的生命周期管理。直接调用静态方法启动往往会导致上下文未就绪就绑定端口,或者在应用关闭时无法优雅释放资源。
其实核心思路很简单:利用 IoC 容器接管 IoAcceptor 的生命周期。我们不需要手动写 main 方法去 bind,而是通过 @Bean 定义配置类,让 Spring 负责初始化和销毁。
原生代码参考
先看看纯原生环境下是怎么写的,这有助于理解底层逻辑。通常我们会实例化 NioSocketAcceptor,配置过滤器链和处理器。
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MinaNative {
private static final int PORT = 9123;
public static void start() throws IOException {
IoAcceptor acceptor = new NioSocketAcceptor();
// 添加日志过滤器,方便排查问题
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
// 这里假设 TimeServerHandler 已经实现了 IoHandler 接口
acceptor.setHandler(new TimeServerHandler());
// 设置读缓冲区大小
acceptor.getSessionConfig().setReadBufferSize(2048);
// 设置空闲检测时间,单位秒
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, );
acceptor.bind( (PORT));
System.out.println( + PORT + );
}
}

