前段時間一直在做公司的微服務項目,技術棧主要是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/,檢查是否可以返回數據,如果不能返回數據,請查看輸出日誌獲取錯誤原因。
Eclipse中啓動參數的設置:
鼠標右鍵點擊項目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)。
源碼下載地址
https://github.com/lining90567/simplerest
http://git.oschina.net/lining90567/simplerest