基於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為例)中啟動:
- 匯入到Eclipse
- 設定配置檔案:src/main/resources/conf/simplerest.properties,相關設定項請參考檔案中的註釋設定。
- 在啟動配置中,新增啟動引數:-f 碟符:\simplerest\src\main\resources\conf\simplerest.properties
- 啟動程式
- 開啟瀏覽器,輸入地址:http://localhost:8888/goods/,檢查是否可以返回資料,如果不能返回資料,請檢視輸出日誌獲取錯誤原因。
- 滑鼠右鍵點選專案simplerest,選擇Run As->Run Configurations...
- 點選右側的Arguments頁籤
- 在Program arguments中輸入:-f 碟符:\simplerest\src\main\resources\conf\simplerest.properties
- 點選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外掛。
開發步驟:
- 在model包中建立模型類,如Student.java。
- 在src/main/resources/com/ln/simplerest/mapper下建立mapper.xml,如StudentMapper.xml,並在xml檔案中定義CURD方法。
- 在mapper包中定義mapper類,如StudentMapper.java。
- 在dao包中定義dao介面,如StudentDao.java
- 在dao.impl包中實現dao介面,如StudentMapperDaoImpl.java,注意設定為@Singleton單例模式。
- 在service包中定義service介面,如StudentService.java。
- 在service.impl包中實現service介面,如StudentServiceImp.java,注意設定為@Singleton單例模式。
- 在resource包下定義資原始檔,如StudentResource.java,注意繼承AbstractResource類並將其設定為@Singleton單例模式。
- 在support.guice包的AppModule.java中繫結dao和service類。
- 在support.undertow包的ApplicationClass.java中註冊資源類(StudentResource.java)。
原始碼下載地址