springboot搭配netty使用,在handler中注解使用rvice/mapper 一直 为null。起初使用 springboot启动类继承applicationcontextaware,再写一个静态方法获取bean来解决。
放在服务器上跑了几个小时就出现了问题,好像是该方案造成的。
另辟蹊径,再看网上给出的答案,因为 handler 是 new出来的,不被spring管理,所以注解根本就没有什么作用。
思前想后,(有bug,下文修正解决:觉得可以给handler添加@component 注解交给spring 管理,再通过构造方法把 handler 传递给s诗歌朗诵背景音乐配乐大全erver。结构代码):
@componentpublic class obdhandler extends channelinboundhandleradapter { private final logger logger = loggerfactory.getlogger(getclass()); @autowired private obdmapper mobdmapper;}
public class obdrver { private logger log = loggerfactory.getlogger(getclass()); private obdhandler obdhandler; private int port; public obdrver(int port,obdhandler obdhandler) { this.port = port; this.obdhandler = obdhan高考什么时候出成绩 2020dler; } private void bind() throws exception { eventloopgroup group = new nioeventloopgroup(); rverbootstrap rverbootstrap = new rverbootstrap(); rverbootstrap.group(group)// .channel(niorversocketchannel.class) // .childhandler(new channelinitializer<socketchannel>() { // @override public void initchannel(socketchannel ch) throws exception { ch.pipeline().addlast(new lengthfieldbadframedecoder(1024*1024,0,4)); ch.pipeline().addlast(obdhandler); } }); }}
@configurationpublic class nettyconfig { @autowired private obdhandler obdhandler; @bean public obdrver obdrver(){ obdrver obdrver = new obdrver(7788,obdhandler); obdrver.startrver(); return obdrver; }}
并发需要创建多个handler,而被spring托管的单例handler会造成以下错误:
is not a @sh德不孤必有邻出自哪arable handler, so can’t be added or removed multiple times.
最终通过在rv商场店铺设计er中注入 rvice/mapper,再通过handler构造传递:
public class obdrver { @autowired private obdmapper mobdmapper; public obdrver(int port) { this.port = port; } private void bind() throws exception { eventloopgroup group = new nioeventloopgroup(); rverbootstrap rverbootstrap = new rverbootstrap(); rverbootstrap.group(group)// .channel(niorversocketchannel.class) // .childhandler(new channelinitializer<socketchannel>() { // @override public void initchannel(socketchannel ch) throws exception { ch.pipeline().addlast(new lengthfieldbadframedecoder(1024*1024,0,4)); ch.pipeline().addlast(new obdhandler(mobdmapper)); } }); }}
@slf4j@componentpublic class bootnettychannelinboundhandleradapter extends channelinboundhandleradapter { public static bootnettychannelinboundhandleradapter bootnettychannelinboundhandleradapter; //1.正常注入[记得主类也需要使用@component注解] @autowired private deviceuprvice deviceuprvice; //2.初始化构造方法一定要有 public bootnettychannelinboundhandleradapter() { } //3.容器初始化的时候进行执行-这里是重点 @postconstruct public void init() { bootnettychannelinboundhandleradapter = this; bootnettychannelinboundhandleradapter.deviceuprvice = this.deviceuprvice; }}
完成以上步骤后通过
bootnettychannel第一个一百年目标inboundhandleradapter.deviceuprvice
调用rvice类即可
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-05 00:40:16,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/f53d50e68f9ee8bbccbf1cb57f622db0.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:如何在Netty中注解使用Service或者Mapper.doc
本文 PDF 下载地址:如何在Netty中注解使用Service或者Mapper.pdf
留言与评论(共有 0 条评论) |