前段时间一直在做公司的微服务项目,技术栈主要是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)。
源码下载地址