Spring Boot整合Netty(二):注入Service 1、添加依赖
 1.          <!--netty-->      2.          <dependency>      3.              <groupId>io.netty</groupId>      4.              <artifactId>netty-all</artifactId>      5.              <version>4.1.24.Final</version>      6.              <scope>compile</scope>      7.          </dependency> 
 
2、创建TcpServer
 2.  @Slf4j      3.  @Component      4.  @Order(value = 1)      5.  public class TcpServer implements CommandLineRunner {      7.      @Value("${netty.ip}")      8.      private String ip;      10.     @Value("${netty.port}")      11.     private int tcpPort;      13.     @Autowired      14.     private ProduceOrderService produceOrderService;      16.     @Autowired      17.     private TestRecordTopService testRecordTopService;      19.     @Autowired      20.     private TestRecordAllService testRecordAllService;      22.     @Autowired      23.     private ProduceOrderLogService produceOrderLogService;      25.     @Async      26.     @Override      27.     public void run(String... args) {      28.         start(ip, tcpPort);      29.     }      31.     public void start(String ip, int port) {      32.         // master reactor      33.         EventLoopGroup bossGroup = new NioEventLoopGroup();      34.         // sub reactor      35.         EventLoopGroup workGroup = new NioEventLoopGroup();      37.         ChannelFuture f;      38.         try {      39.             // start      40.             ServerBootstrap bootstrap = new ServerBootstrap();      41.             // install NioEventLoopGroup      42.             bootstrap.group(bossGroup, workGroup)      43.                     // set channel type NIO      44.                     .channel(NioServerSocketChannel.class)      45.                     // set connect params      46.                     .option(ChannelOption.SO_BACKLOG, 1024)      47.                     .childOption(ChannelOption.SO_KEEPALIVE, true)      48.                     .childOption(ChannelOption.TCP_NODELAY, true)      49.                     // set in/out event handler      50.                     .childHandler(new ChannelInitializer<NioSocketChannel>() {      51.                         @Override      52.                         protected void initChannel(NioSocketChannel ch) {      53.                             // 添加分隔符解码器      54.                             ch.pipeline().addFirst(new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, Unpooled.copiedBuffer("&&".getBytes())));      55.                             ch.pipeline().addLast(new TcpMsgOutHandler());      56.                             ch.pipeline().addLast(new TcpActiveHandler());      57.                             ch.pipeline().addLast(new TcpMsgInHandler(produceOrderService, testRecordTopService, testRecordAllService, produceOrderLogService));      58.                         }      59.                     });      60.             // bind port      61.             f = bootstrap.bind(ip, port).sync();      62.             if (f.isSuccess()) {      63.                 log.info("start tcp server success: {}", port);      64.             } else {      65.                 log.warn("start tcp server failed: {}", f.cause().getMessage());      66.             }      67.             f.channel().closeFuture().sync();      68.         } catch (Exception e) {      69.             log.error("start tcp server error: {}", e.getMessage());      70.         } finally {      71.             workGroup.shutdownGracefully();      72.             bossGroup.shutdownGracefully();      73.         }      74.     }      75. } 
 
3、Handler 
1.  @Slf4j      2.  @ChannelHandler.Sharable      3.  public class TcpActiveHandler extends ChannelInboundHandlerAdapter {      5.      private final static AtomicLong activeCount = new AtomicLong(0);      7.      @Override      8.      public void channelActive(ChannelHandlerContext ctx) {      9.          log.info("active client count: {}", activeCount.addAndGet(1));      10.     }      12.     @Override      13.     public void channelInactive(ChannelHandlerContext ctx) {      14.         log.info("active client count: {}", activeCount.decrementAndGet());      15.     }      17. }      
 
1.  public class TcpMsgOutHandler extends ChannelOutboundHandlerAdapter {      3.      @Override      4.      public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {      5.          ctx.writeAndFlush(Unpooled.copiedBuffer(((String) msg).getBytes(StandardCharsets.UTF_8)));      6.      }      7.  }      
 
netty+4G DTU zip  0星  超过10%的资源  76KB 下载 
 2.  @Slf4j      3.  public class TcpMsgInHandler extends ChannelInboundHandlerAdapter {      5.      private final ProduceOrderService produceOrderService;      6.      private final TestRecordTopService testRecordTopService;      7.      private final TestRecordAllService testRecordAllService;      8.      private final ProduceOrderLogService produceOrderLogService;      10.     public TcpMsgInHandler(ProduceOrderService produceOrderService, TestRecordTopService testRecordTopService,      11.  TestRecordAllService testRecordAllService,ProduceOrderLogService produceOrderLogService) {      12.         this.produceOrderService = produceOrderService;      13.         this.testRecordTopService = testRecordTopService;      14.         this.testRecordAllService = testRecordAllService;      15.         this.produceOrderLogService = produceOrderLogService;      16.     }      18.     @Override      19.     public void channelActive(ChannelHandlerContext ctx) {      20.         log.info("client active: {}", ctx.channel().remoteAddress());      21.     }      23.     @Override      24.     public void channelInactive(ChannelHandlerContext ctx) {      25.         log.info("client inactive: {}", ctx.channel().remoteAddress());      26.     }      28.     @Override      29.     public void channelRead(ChannelHandlerContext ctx, Object msg) {      30.         ByteBuf byteBuf = (ByteBuf) msg;      31.         String readMsg = byteBuf.toString(CharsetUtil.UTF_8);      32.         ProduceMsg produceMsg = null;      33.         try {      34.             produceMsg = JSONObject.parseObject(readMsg, ProduceMsg.class);      35.         } catch (Exception e) {      36.             log.error("ProduceMsg 格式化消息失败!{}", e.getMessage());      37.             ctx.write(ERROR_FORMAT_MSG);      38.         }      40.         if (produceMsg != null) {      41.             log.info("Client Msg: {}", produceMsg);      42.             TestRecordTopVO testRecordTopVO;      43.             String msgType = produceMsg.getMsgType();      44.             String msgContent = produceMsg.getMsgContent();      45.             switch (msgType) {      46.                 // 通过IMEI号获取订单信息      47.                 case FIND_PRODUCE_ORDER_INFO:      48.                     ProduceOrderVO produceOrderVO = produceOrderService.queryProduceOrder(msgContent);      49.                     if (produceOrderVO == null) {      50.                         ctx.write(ERROR_RECORD_NOT_EXIST);      51.                     } else {      52.                         ctx.write(JSONObject.toJSONString(produceOrderVO));      53.                     }      54.                     break;      55.                 case SAVE_PRODUCE_DATA:      57.                     break;      58.                 case SAVE_PRODUCE_LOG:      60.                     break;      61.                 case PRODUCT_OUTBOUND:      63.                     break;      64.                 case GET_METER_CODE:      66.                     break;      67.                 case FIND_PRODUCE_RECORD_BY_IMEI:      69.                     break;      70.                 case FIND_PRODUCE_RECORD_BY_METER_CODE:      72.                     break;      73.                 default:      74.                     log.error("消息不存在!");      75.             }      76.         }      78.     }      80.     @Override      81.     public void channelReadComplete(ChannelHandlerContext ctx) {      82.         ctx.flush();      83.     }      85.     @Override      86.     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {      87.         log.error("client {} exception: {}", ctx.channel().remoteAddress(), cause);      88.     }      89. } 
 
 L丶cz
关注
专栏目录
netty 无法导入注入 Bean问题解决
weixin_41144975的博客 
   470 
这个问题和weboscket一样 * 因 Spring**Boot  WebSocket 对每个客户端连接都会创建一个 WebSocketServer( @ServerEndpoint 注解对应的)  对象,Bean 注入 操作会被直接略过,因而手动注入 一个全局变量,spring 管理的都是单对象,和Websocket 多对象相冲突。 同理 netty 也是多对象,spring 无法管理 解决方法: 网上出现较… 
在Netty 中注入**Spring 成份 
石磊的博客 
   781 
在Netty 中注入**Spring 成份 
评论
写评论
spring  boot 集成netty**注入 bean_阔乐猫的博客
6-6
主要代码 启动netty  解码 要点: 1.再要注入 bean的类上加上**@Component** 2.spring 默认创建的对像是单例的,所以要使用**@Scope(“prototype”)** 每次获取对象都会创建新的对象,不然netty 只能创建一个连接,当创建多个的时候报so … 
…无法注入 bean的问题解决_shu010的博客_netty  注入 bean 
7-29
作者在使用netty 集成spring**注入 调用时普通的@Autowired一直bean注入 为null,这里我只是记录针对netty注入 spring 无法注入 bean的解决发放,具体底层实现,希望大神不吝赐教 首先上解决代码块,copy过去就可以直接用 … 
Netty -4 无法依赖注入**Service s
qq_41850449的博客 
   715 
今天博主在写数据库的时候遇到一个问题:  @ChannelHandler.Sharable public class TcpHandler extends ChannelInboundHandlerAdapter { @Autowired private FormRepository formRepository; //这个借口注入 不来啊!气 @Override public void c… 
大牛深入讲解!9000字通俗易懂的讲解下Java 注解,赶紧学起来 
   179 
前言 在大型系统中,为了减少数据库压力通常会引入缓存机制,一旦引入缓存又很容易造成缓存和数据库数据不一致,导致用户看到的是旧数据。 为了减少数据不一致的情况,更新缓存和数据库的机制显得尤为重要,接下来带领大家踩踩坑。 直击面试 反正我是带着这些问题往下读的 说一下 JVM 运行时数据区吧,都有哪些区?分别是干什么的? Java  8 的内存分代改进 举例栈溢出的情况? 调整栈大小,就能保存不出现溢出吗? 分配的栈内存越大越好吗? 垃圾回收是否会涉及到虚拟机栈? 方法中定义的局部变量是否线程安全? 运行时 
Netty  handler无法进行依赖注入 的问题_蝉 沐 风的博客…
5-20
使用Netty 作为服务端程序时,遇到handler无法进行依赖注入 的问题,代码如下:@Slf4jpublic class Netty ServerHandler extends ChannelInboundHandlerAdapter { //注入 失败,获取值为null @Autowired XxService  xxService ; //…忽略… 
Netty  为handler注入 服务接口_勤奋的Mr.Li的博客
5-8
问题: 在Spring 项目中我们总是习惯性的为要交给Spring 托管的bean加上类注解@Component/@Service 等,然后在使用其的地方使用@AutoWired/@Resource等注解注入 实例. 然而Netty 的handler是netty 启动的时候new出来,并没有交给spring  IOC托管,直接用… 
@service 注解_解决websocket和netty 中无法注入**service  
weixin_39641876的博客 
   252 
首先,目前我的项目是spring**boot +netty ,在netty -client中注入 了service ,但是在调用service 的时候一直报null空指针异常。刚开始实验了N次还是无法解决这个问题,以为是自己的写法问题,并没有想到是service 无法实例化的问题,后来通过度娘,才找到了解决方法。方法如下: 将websocket或者netty 交给spring 管理(在类上加上 @Component注解)… 
Netty  Handler无法依赖注入  注入**service 对象失败
梦里蓝天 
   317 
@Component //第一步 加入spring 容器 public class FpgaScoketServerHandler extends SimpleChannelInboundHandler<String>{ public static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); @Autowired //第二 步 把dao加载进来 
深度解读Netty :自定义组件如何注入**Spring 底层的组件_普… 
6-3
“Java 程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring ,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty 、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、… 
netty整合 spring**boot 无法注入 bean的问题
祥哥 
   482 
原因分析,是因为没有遵守spring 的依赖注入 规则,对象不能通过new来实体化 决绝如下:  1. netty 的server主类添加@Component注解, 2. handler通过注解注入 ,不能new 3. handler处理类必须添加@Component注解 … 
Spring**Boot +Netty +Websocket整合 案例( 3分钟实现一个基本的聊天功能) 
程序员闪充宝 
   1403 
作者: 愚公要移山www.toutiao.com/i6775018273139327492/之前使用Springboot 整合 了websocket,实现了一个后端向前端推送信息的基本小案例,… 
Spring  Boot  + Netty  中 @Autowired, @Value 为空解决
weixin_33768481的博客 
   487 
问题描述 使用 Spring  Boot  + Netty  新建项目时 Handler 中的 @Autowired, @Value 注解的始终为空值 解决方法 @Component // 1. 添加 @Component 注解 public class TestHandler extends ChannelInboundHandlerAdapter { private static Test… 
Spring**Boot 集成Netty 时在Handler类中注入**service 和dao为null
人生最遗憾的莫过于:轻易地放弃了不该放弃的,固执地坚持了不该坚持的 
   5242 
最近在做一个服务器接收客户端消息,之前一直都只接触web开发,第一次接触服务器开发,接触到Netty ,但在Netty 的Handler类里注入 为null。 public class HttpRequestHandler extends SimpleChannelInboundHandler<FullHttpRequest> { @Autowired private U… 
spring 的@Autowired注入 无法实例化service 问题解决(**netty 处理类无法实例化service**)  热门推荐
434494584_磊 
   1万+ 
首先目前我写的项目是spring**boot +netty ,在接收客户端传输的数据时调用service 一直报null指针异常  刚开始没有想到是service 无法实例化的问题,一直在测试数据方面的问题,后来去群里讨论才知道问题所在  我这里讲的netty 接收数据的handler类,但是基本都大同小异  如果我们直接在一个不是controller类的里面注入 @Autowired的时候,而且还去调用就会… 
主动获取spring 容器工具类Spring ContextUtil 
飞翔中的菜鸟 
   8239 
/** * 获取spring 容器,以访问容器中定义的其他bean */ @Component public class Spring ContextUtil implements ApplicationContextAware { // Spring 应用上下文环境 @Autowired private ApplicationContext applicationCont 
关于netty 中spring 对象注入 失败的问题 
TIANTIANDOUNITIAN的博客 
   1553 
今天在做项目的时候发现在netty 中注入**service 失败,百度许久后也找不到答案(@Component,@PostConstruct)未起作用,后灵光一现,发现了问题所在: 如图:         这些地方都必须通过spring**注入 才能实现其他依赖注入 ,之前这里都是采用new的,所以导致spring**注入 失败… 
Netty  handler无法进行依赖注入 的问题
跑码场 
   867 
使用Netty 作为服务端程序时,遇到handler无法进行依赖注入 的问题,代码如下:  @Slf4j public class Netty ServerHandler extends ChannelInboundHandlerAdapter { //注入 失败,获取值为null @Autowired XxService  xxService ; //……….忽略其他程序 } 解决方法如下及原理如下:  @Component //第1步 public class Server 
Spring  Boot  整合  Netty 服务 最新发布
woaiwojialanxi的专栏 
   735 
Spring  Boot  整合  Netty 服务
【BUG解决】Spring  boot  中Handler,Filter注入  Service 、Repositoy为null 
aresblank的博客 
   286 
新建 spring BeanUtil.java  import org.spring framework.beans.BeansException; import org.spring framework.context.ApplicationContext; import org.spring framework.context.ApplicationContextAware; import org.spring framework.stereotype.Component; /** * @autho. 
netty 学习—-spring整合 netty 无法注入 bean的问题解决
8080 
   3735 
作者在使用netty 集成spring**注入 调用时普通的@Autowired一直bean注入 为null,这里我只是记录针对netty注入 spring 无法注入 bean的解决发放,具体底层实现,希望大神不吝赐教 首先上解决代码块,copy过去就可以直接用 @Component public class Netty WebSocketServerHandler extends SimpleChannel… 
Java 使用final构造器注入 方式更安全
蜜桃先生的博客 
   3104 
普通玩家 private final UserRepository userRepository; public UserResource(UserRepository userRepository) { this.userRepository= userRepository; } 高级玩家 添加在类上 @RequiredArgsConstructor(onConstructor = @__(@Autowired)) final注入  private final UserValidator 
Netty 中注解使用Service 或者Mapper
楊杰的博客 
   2501 
Spring**Boot 搭配Netty 使用,在Handler中注解使用Service /Mapper 一直 为null。起初使用 Spring**Boot 启动类继承ApplicationContextAware,再写一个静态方法获取Bean来解决。放在服务器上跑了几个小时就出现了问题,好像是该方案造成的。另辟蹊径,再看网上给出的答案,因为 Handler 是 new出来的,不被Spring 管理,所以注…
“相关推荐”对你有帮助么? 
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页 
L丶cz 
码龄8年   杭州为峰科技技术有限公司  
24 原创 
109万+ 周排名 
17万+ 总排名 
1万+
访问
等级
265
积分
 6
粉丝
12
获赞
10
评论
21
收藏
 
 
 
 
 
 
 
私信 
 关注
 
热门文章 
分类专栏 
 
最新评论 
您愿意向朋友推荐“博客详情页”吗? 
最新文章 
2021年24篇 
    举报
 ×
拖拽到此处
图片将完成下载