怎么在Netty中注解使用Service或者Mapper
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍了怎么在Netty中注解使用Service或者Mapper,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Netty注解
千家信息网最后更新 2025年01月20日怎么在Netty中注解使用Service或者Mapper
这篇文章主要介绍了怎么在Netty中注解使用Service或者Mapper,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
Netty注解使用Service或Mapper
SpringBoot搭配Netty使用,在Handler中注解使用Service/Mapper 一直 为null。起初使用 SpringBoot启动类继承ApplicationContextAware,再写一个静态方法获取Bean来解决。
放在服务器上跑了几个小时就出现了问题,好像是该方案造成的。
另辟蹊径,再看网上给出的答案,因为 Handler 是 new出来的,不被Spring管理,所以注解根本就没有什么作用。
思前想后,(有BUG,下文修正解决:觉得可以给Handler添加@Component 注解交给Spring 管理,再通过构造方法把 Handler 传递给Server。结构代码):
Handler
@Componentpublic class OBDHandler extends ChannelInboundHandlerAdapter { private final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private OBDMapper mOBDMapper;}
Server
public class OBDServer { private Logger log = LoggerFactory.getLogger(getClass()); private OBDHandler obdHandler; private int port; public OBDServer(int port,OBDHandler obdHandler) { this.port = port; this.obdHandler = obdHandler; } private void bind() throws Exception { EventLoopGroup group = new NioEventLoopGroup(); ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(group)// .channel(NioServerSocketChannel.class) // .childHandler(new ChannelInitializer() { // @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(1024*1024,0,4)); ch.pipeline().addLast(obdHandler); } }); }}
创建Server
@Configurationpublic class NettyConfig { @Autowired private OBDHandler obdHandler; @Bean public OBDServer obdServer(){ OBDServer obdServer = new OBDServer(7788,obdHandler); obdServer.startServer(); return obdServer; }}
二次修订
并发需要创建多个Handler,而被Spring托管的单例Handler会造成以下错误:
is not a @Sharable handler, so can't be added or removed multiple times.
最终通过在Server中注入 Service/Mapper,再通过Handler构造传递:
public class OBDServer { @Autowired private OBDMapper mOBDMapper; public OBDServer(int port) { this.port = port; } private void bind() throws Exception { EventLoopGroup group = new NioEventLoopGroup(); ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(group)// .channel(NioServerSocketChannel.class) // .childHandler(new ChannelInitializer() { // @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(1024*1024,0,4)); ch.pipeline().addLast(new OBDHandler(mOBDMapper)); } }); }}
Netty handler注入service为空
注入方式
@Slf4j@Componentpublic class BootNettyChannelInboundHandlerAdapter extends ChannelInboundHandlerAdapter { public static BootNettyChannelInboundHandlerAdapter bootNettyChannelInboundHandlerAdapter; //1.正常注入[记得主类也需要使用@Component注解] @Autowired private DeviceUpService deviceUpService; //2.初始化构造方法一定要有 public BootNettyChannelInboundHandlerAdapter() { } //3.容器初始化的时候进行执行-这里是重点 @PostConstruct public void init() { bootNettyChannelInboundHandlerAdapter = this; bootNettyChannelInboundHandlerAdapter.deviceUpService = this.deviceUpService; }}
完成以上步骤后通过
bootNettyChannelInboundHandlerAdapter.deviceUpService
调用service类即可
感谢你能够认真阅读完这篇文章,希望小编分享的"怎么在Netty中注解使用Service或者Mapper"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
注解
篇文章
方法
管理
思前想后
另辟蹊径
下文
代码
价值
作用
兴趣
同时
多个
容器
小时
方式
方案
时候
更多
朋友
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海管理软件开发商
ptp在哪个服务器
创造数据库的命令格式
vba判断数据库是否可以连接
风险数据库管理手册
数据库 附加
怎么查看textbox数据库
计算机网络技术专业应聘
英业达软件开发部门
部落去哪个服务器
阿里云服务器如何进入数据库
为什么兴趣部落连不上服务器
网络安全博览会在哪里举办
体育人群数据库如何变现
呼死你的软件开发
nas服务器是长连接还是短连接
登录软件服务器出错
苍之骑士团2服务器排行
软件开发mr周期
网络技术支持培训
网络安全工作就业方向
应急预案网络安全事件划分等级
和利时m6服务器离线是怎么回事
数据库配置怎么调用
碳资产数据库与管理平台
中兴网络技术工程师海外岗
沂水旗胜网络技术是什么公司
计算机网络安全特性有什么
数据库info
科技牛产学研 互联网平台