springboot集成netty部署在weblogic上停止再启动时端口占用
最近手头上出现了一个问题,将springboot集成netty编写的项目打成war包部署在weblogic11g上时,使用weblogic启动一次项目再关闭项目,再次启动的时候netty就发生了端口占用问题,经检查发现是weblogic关闭项目的时候netty并没有关闭,使得项目再次启动初始化netty的时候报错,请问有什么好的解决办法吗?
@Component
//@DependsOn("fieldChangeListener")
public class NettyInital implements ApplicationListener<ContextRefreshedEvent>{
private Logger logger = LoggerFactory.getLogger(this.getClass().getName());
@Autowired
private MessageController messageControllerImpl;
public void start() {
EventLoopGroup parentGroup = new NioEventLoopGroup();
EventLoopGroup childGroup = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(parentGroup, childGroup);
//指定通道排队数量
bootstrap.option(ChannelOption.SO_BACKLOG, 128)
//心跳包,设置成false,自己写心跳包
.childOption(ChannelOption.SO_KEEPALIVE, false)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
logger.info("has a request....");
ch.pipeline().addLast(new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, Delimiters.lineDelimiter()[0]));
ch.pipeline().addLast(new StringDecoder());
ch.pipeline().addLast(new ServerHandler(messageControllerImpl));
//中介者handler
ch.pipeline().addLast(new StringEncoder());
}
});
ChannelFuture f = bootstrap.bind(ConfigUtil.getNettyPort()).sync();
InetAddress netAddress = InetAddress.getLocalHost();
logger.info(">>>>>>>>>>netty statrt successfully!");
// f.channel().closeFuture().sync();//获取channel的CloseFuture,阻塞当前线程直到关闭操作完成
} catch (Exception e) {
e.printStackTrace();
parentGroup.shutdownGracefully();
childGroup.shutdownGracefully();
}
}
//程序启动初始化该类
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
this.start();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我也碰到过这个问题,我的解决办法是在springboot里写一个listener,当springboot容器销毁时调用netty的shutdownGracefully方法,就可以关闭netty服务了
大兄弟,你这问题解决了吗,能否给个方案