最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在Netty中注解使用Service或者M(jìn)apper

 更新時間:2022年02月14日 17:03:31   作者:sinat_35938012  
這篇文章主要介紹了如何在Netty中注解使用Service或者M(jìn)apper,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Netty注解使用Service或Mapper

SpringBoot搭配Netty使用,在Handler中注解使用Service/Mapper 一直 為null。起初使用 SpringBoot啟動類繼承ApplicationContextAware,再寫一個靜態(tài)方法獲取Bean來解決。

放在服務(wù)器上跑了幾個小時就出現(xiàn)了問題,好像是該方案造成的。

另辟蹊徑,再看網(wǎng)上給出的答案,因為 Handler 是 new出來的,不被Spring管理,所以注解根本就沒有什么作用。

思前想后,(有BUG,下文修正解決:覺得可以給Handler添加@Component 注解交給Spring 管理,再通過構(gòu)造方法把 Handler 傳遞給Server。結(jié)構(gòu)代碼):

Handler

@Component
public 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<SocketChannel>() { //
?? ??? ??? ?@Override
?? ??? ??? ?public void initChannel(SocketChannel ch) throws Exception {
?? ??? ??? ??? ?ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(1024*1024,0,4));
?? ??? ??? ??? ?ch.pipeline().addLast(obdHandler);
?? ??? ??? ?}
?? ??? ?});
? ? }
}

創(chuàng)建Server

@Configuration
public class NettyConfig {?? ?
?? ?@Autowired
?? ?private OBDHandler obdHandler;
?? ?
?? ?@Bean
?? ?public OBDServer obdServer(){
?? ??? ?OBDServer obdServer = new OBDServer(7788,obdHandler);
?? ??? ?obdServer.startServer();
?? ??? ?return obdServer;
?? ?}
}

二次修訂

并發(fā)需要創(chuàng)建多個Handler,而被Spring托管的單例Handler會造成以下錯誤:

is not a @Sharable handler, so can't be added or removed multiple times.

最終通過在Server中注入 Service/Mapper,再通過Handler構(gòu)造傳遞:

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<SocketChannel>() { //
?? ??? ??? ?@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
@Component
public class BootNettyChannelInboundHandlerAdapter extends ChannelInboundHandlerAdapter {
? ?public static BootNettyChannelInboundHandlerAdapter?
? ?bootNettyChannelInboundHandlerAdapter;
? ? //1.正常注入[記得主類也需要使用@Component注解]
? ? @Autowired
? ? private DeviceUpService deviceUpService;
? ? //2.初始化構(gòu)造方法一定要有
? ? public BootNettyChannelInboundHandlerAdapter() {
?
? ? }
? ? //3.容器初始化的時候進(jìn)行執(zhí)行-這里是重點(diǎn)
? ? @PostConstruct
? ? public void init() {
? ? ? ? bootNettyChannelInboundHandlerAdapter = this;
? ? ? ? bootNettyChannelInboundHandlerAdapter.deviceUpService = this.deviceUpService;
? ? }
}

完成以上步驟后通過

bootNettyChannelInboundHandlerAdapter.deviceUpService

調(diào)用service類即可

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring  mybatis多數(shù)據(jù)源實例詳解

    spring mybatis多數(shù)據(jù)源實例詳解

    本文主要介紹sping mybatis多數(shù)據(jù)源處理,在開發(fā)過程中經(jīng)常會遇到多個數(shù)據(jù)庫,這里給大家舉例說明如何處理,希望能幫助有需要的小伙伴
    2016-07-07
  • 利用SpringMVC接收復(fù)雜對象和多個文件(前端使用JQuery)

    利用SpringMVC接收復(fù)雜對象和多個文件(前端使用JQuery)

    這篇文章主要介紹了利用SpringMVC接收復(fù)雜對象和多個文件(前端使用JQuery),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • java創(chuàng)建txt文件并存入內(nèi)容

    java創(chuàng)建txt文件并存入內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了java創(chuàng)建txt文件并存入內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Spring?Boot?利用?XML?方式整合?MyBatis

    Spring?Boot?利用?XML?方式整合?MyBatis

    這篇文章主要介紹了Spring?Boot?利用?XML?方式整合?MyBatis,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,組要的小伙伴可以參考一下
    2022-05-05
  • Java面試必備之ArrayList陷阱解析

    Java面試必備之ArrayList陷阱解析

    昨天小楓接到了一個公司的面試電話,其中一道面試題覺得有點(diǎn)意思,在這里和大家一起分享下。面試題是ArrayList如何刪除指定元素。乍聽很簡單的問題,但是如果沒有實際踩過坑很容易掉進(jìn)面試官的陷阱中,我們一起來分析下吧
    2022-02-02
  • 手動實現(xiàn)將本地jar添加到Maven倉庫

    手動實現(xiàn)將本地jar添加到Maven倉庫

    這篇文章主要介紹了手動實現(xiàn)將本地jar添加到Maven倉庫方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Mybatis-Plus開發(fā)提速器generator的使用

    Mybatis-Plus開發(fā)提速器generator的使用

    本文就介紹這款基于Mybatis-Plus的代碼自助生成器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringBoot排除不需要的自動配置類DataSourceAutoConfiguration問題

    SpringBoot排除不需要的自動配置類DataSourceAutoConfiguration問題

    這篇文章主要介紹了SpringBoot排除不需要的自動配置類DataSourceAutoConfiguration問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java線程池的幾種實現(xiàn)方法和區(qū)別介紹

    Java線程池的幾種實現(xiàn)方法和區(qū)別介紹

    下面小編就為大家?guī)硪黄狫ava線程池的幾種實現(xiàn)方法和區(qū)別。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-05-05
  • SpringMVC轉(zhuǎn)發(fā)與重定向參數(shù)傳遞的實現(xiàn)詳解

    SpringMVC轉(zhuǎn)發(fā)與重定向參數(shù)傳遞的實現(xiàn)詳解

    這篇文章主要介紹了SpringMVC轉(zhuǎn)發(fā)與重定向參數(shù)傳遞,對于重定向,可以通過FlashMap或RedirectAttributes來在請求間傳遞數(shù)據(jù),因為重定向涉及兩個獨(dú)立的HTTP請求,而轉(zhuǎn)發(fā)則在同一請求內(nèi)進(jìn)行,數(shù)據(jù)可以直接通過HttpServletRequest共享,需要的朋友可以參考下
    2022-07-07

最新評論

仙居县| 罗定市| 隆安县| 蒙阴县| 陕西省| 龙南县| 丹阳市| 资阳市| 连平县| 柯坪县| 荥阳市| 灵石县| 威海市| 海晏县| 潞城市| 永顺县| 南漳县| 凯里市| 密山市| 临江市| 濮阳市| 开原市| 莱州市| 八宿县| 曲周县| 牙克石市| 县级市| 高陵县| 云龙县| 宁德市| 镇江市| 保定市| 宁乡县| 天津市| 高清| 抚松县| 江达县| 广汉市| 广宁县| 霞浦县| 阳春市|