Netty實現SpringBoot服務器

Netty實現類SpringMvcRestHttp服務器(完整代碼在github上)

Github地址在最下面,正常使用的話可以無視server包,只關注controller,service和database即可,第一次請求比較耗時應該是netty的某些初始化之後正常,沒加gitignore稍微有些不太乾淨…

主要運用的技術:

  • Netty4.x
  • Mybatis3
  • guice
  • druid

摘要

主要運用自定義註解,和反射完成參數與方法的映射,參數類型轉換等,以Netty爲基礎框架,實現了基本的GET,POST,DELETE等請求方式,和文件上傳,實現了@RequestMapping,@RequestBody,@RestController等使用,均以JSON格式進行響應,以Google的Guice框架完成Service到Controller的注入,持久層使用Mybatis,使用MybatisGeneratorMaven插件進行逆向生成Mapper和實體類,FastJson序列化,和lombok插件,使用alibabaDruid作爲數據源,LogBack作爲日誌管理.打包方式爲jar,通過mvn package打包,java - jar 運行即可

註解對比

SpringMVC HttpNetty
@RequestMapping @NettyRequestMapping
@RequestBody @NettyRequestBody
@Controller @NettyRestController
@RequestParam @NettyRequestParam

Service注入方式

在GModel中綁定接口與實現類

public class GModel extends AbstractModule{
    @Override
    protected void configure() {
        //接口 to 實現類
        bind(UserService.class).to(UserServiceImpl.class).in(Scopes.SINGLETON);
    }
}

在Controller或其他Service中使用如下方式注入

    //需要注入的service
    private UserService userService;
    {
        //通過注入器去拿到接口
        userService = ServiceInjector.getService(UserService.class);
    }

Mapper使用方式

首先是增刪改,需要開啓自動事務

@Override
    public  void save(TUser tUser) {
    	//獲取自動提交事務
        try(SqlSession sqlSession= SqlSessionUtils.openTransaction()) {
            //直接get逆向生成的mapper類,調用其中的方法
            TUserMapper mapper = sqlSession.getMapper(TUserMapper.class);
            mapper.insert(tUser);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

然後是query,分爲@Select註解形式,和使用逆向生成的Mapper兩種(其實也可以手寫XML)

 @Override
    public TUser findUserById(Integer id) {
    	//獲取非自動提交事務
        try(SqlSession sqlSession= SqlSessionUtils.openQuery()) {
            TUserMapper mapper = sqlSession.getMapper(TUserMapper.class);
            TUser tUser = mapper.selectByPrimaryKey(id);
            return tUser;
        }catch (Exception e){
            e.printStackTrace();
        }
        //返回NULL會給瀏覽器響應500
        return null;
    }

然後是註解形式,寫在逆向生成的Mapper中就可以

    @Select("select * from t_user where id = #{id}")
    TUser findUser(@Param("id") Integer id);       

配置文件在Netty.properties中

server.port=8080
db.driverClass=com.mysql.jdbc.Driver
db.connectionUrl=jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false
db.userName=root
db.password=root
#controller包的相對路徑 *代表通配符
controller.package=controller.*

下面貼上部分代碼,和壓測圖
在這裏插入圖片描述
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190816150440173.png
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

壓測條件,1000線程10S啓動執行一次

插入:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

隨機主鍵無緩存查詢

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

CLICK ME TO GIT HUB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章