基於guice、resteasy、mybatis和undertow實現的輕量級restful服務

前段時間一直在做公司的微服務項目,技術棧主要是spring Boot+Thrift,感覺使用Spring Boot確實太方便了:

1. 無xml配置。

2. 自動配置。

3. 應用可打包爲單獨的jar包獨立運行。

4. 可嵌入tomcat、jetty或undertow,無需部署war包。

5. 使用Spring Data,以非常少的代碼遍可以操作數據庫

......


但是由於Spring Boot框架本身過於龐大,再加上自動配置等功能,導致應用的啓動速度較慢,資源消耗也較大,所以就有了使用其他輕量級的框架實現RESTful服務的想法,綜合考慮,決定用Google Guice取代Spring IoC,用RESTEasy取代Spring MVC,用MyBatis取代hibernate JPA,服務內嵌Undertow,實現輕量級的RESTful服務,也希望能給想開發RESTful服務的同僚們一些小小的幫助。


  • Google Guice


Guice是Google開發的一個輕量級,基於Java5(主要運用泛型與註釋特性)的依賴注入框架(IOC)。Guice非常小而且快,號稱比Spring快十倍左右。


  • RESTEasy


其是 JAX-RS 規範的一個完整實現並通過 JCP 認證。


  • MyBatis


簡單靈活,對SQL可控,有利於編寫性能更好的DAO層。


  • Undertow


使用Undertow作爲嵌入式的Web容器,方便部署。


項目結構如下圖所示:



  • dao:數據訪問層,包括數據訪問接口與MyBatis Mapper實現類

  • exception:異常類

  • mapper:MyBatis Mapper接口

  • model:實體類

  • resouce:REST Resouce(Controller),定義RESTful API.

  • service:服務接口與實現類

  • support:guice、mybatis、undertow的相關支持工具類(Guice Injector單例類、事務註解、事務攔截器、Session管理類、Druid連接池工廠類等)。


啓動SimpleREST
啓動MySQL並執行腳本,腳本文件在script文件夾下。

在開發工具(以Eclipse爲例)中啓動:

  1. 導入到Eclipse

  2. 設置配置文件:src/main/resources/conf/simplerest.properties,相關設置項請參考文件中的註釋設置。

  3. 在啓動配置中,添加啓動參數:-f 盤符:\simplerest\src\main\resources\conf\simplerest.properties

  4. 啓動程序

  5. 打開瀏覽器,輸入地址:http://localhost:8888/goods/,檢查是否可以返回數據,如果不能返回數據,請查看輸出日誌獲取錯誤原因。



Eclipse中啓動參數的設置:

  1. 鼠標右鍵點擊項目simplerest,選擇Run As->Run Configurations...

  2. 點擊右側的Arguments頁籤

  3. 在Program arguments中輸入:-f 盤符:\simplerest\src\main\resources\conf\simplerest.properties

  4. 點擊Apply


打包
執行 mvn package,成功後會在項目的target文件下生成 simplerest-1.0.0.zip,解壓後執行bin\run.bat(Linux下執行run.sh)即可運行服務。


相關RESTful API
以貨品(goods)爲例,主機名:localhost,端口爲默認的8888

獲取全部貨品(Method:GET)
http://localhost:8888/goods/

分頁查詢貨品(Method:GET)
http://localhost:8888/goods/listPaged?pageIndex=1&pageSize=2

得到指定Id的貨品(Method:GET)
http://localhost:8888/goods/223c9e36055811e7b74a00155d010e04

添加貨品(Method:POST)
http://localhost:8888/goods/

http body(application/json)
{
    "name": "固態硬盤"
}

修改貨品(Method:POST)
http://localhost:8888/goods/223c9e36055811e7b74a00155d010e04

http body(application/json)
{
  "name": "奧迪轎車"
}

刪除貨品(Method:DELETE)
http://localhost:8888/goods/223c9e36055811e7b74a00155d010e04


調試工具
建議使用Chrome瀏覽器,安裝Postman插件。


開發步驟:

  1. 在model包中創建模型類,如Student.java。

  2. 在src/main/resources/com/ln/simplerest/mapper下創建mapper.xml,如StudentMapper.xml,並在xml文件中定義CURD方法。

  3. 在mapper包中定義mapper類,如StudentMapper.java。

  4. 在dao包中定義dao接口,如StudentDao.java

  5. 在dao.impl包中實現dao接口,如StudentMapperDaoImpl.java,注意設置爲@Singleton單例模式。

  6. 在service包中定義service接口,如StudentService.java。

  7. 在service.impl包中實現service接口,如StudentServiceImp.java,注意設置爲@Singleton單例模式。

  8. 在resource包下定義資源文件,如StudentResource.java,注意繼承AbstractResource類並將其設置爲@Singleton單例模式。

  9. 在support.guice包的AppModule.java中綁定dao和service類。

  10. 在support.undertow包的ApplicationClass.java中註冊資源類(StudentResource.java)。



源碼下載地址

https://github.com/lining90567/simplerest

http://git.oschina.net/lining90567/simplerest


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