1. 程式人生 > >基於guice、resteasy、mybatis和undertow實現的輕量級restful服務

基於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)。

原始碼下載地址