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篇
举报
×
拖拽到此处
图片将完成下载