文档章节

基于guice、resteasy、mybatis和undertow实现的轻量级restful服务

ln90567
 ln90567
发布于 2017/03/17 06:57
字数 999
阅读 179
收藏 1

前段时间一直在做公司的微服务项目,技术栈主要是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

© 著作权归作者所有

ln90567
粉丝 1
博文 1
码字总数 999
作品 0
朝阳
私信 提问
加载中

评论(1)

刘洋中国
刘洋中国
看着很不错的样子先试试。
RESTEasy 2.2 发布,RESTful 框架

JBoss RESTEasy 是一个用来使用Java语言开发 RESTFul Web服务的框架。 RESTEasy 项目是 JAX-RS 的一个实现,集成的一些亮点: 不需要配置文件,只要把JARs文件放到类路径里面,添加 @Path 注...

红薯
2011/06/04
2.1K
1
RESTEasy 2.1.0 GA 发布

JBoss RESTEasy 是一个用来使用Java语言开发 RESTFul Web服务的框架。 RESTEasy 项目是 JAX-RS 的一个实现,集成的一些亮点: 不需要配置文件,只要把JARs文件放到类路径里面,添加 @Path 注...

红薯
2010/12/29
685
3
Jboss RestEasy构建简单的RESTful Web Services示例(1)

项目上要用到webservice,鉴于现在restful webservice比较流行,打算用restful来建立webservice,网上搜了一遍,认为Jboss的RESTEasy比较容易上手,于是就用它来小试牛刀! RESTEasy是JBoss...

Eric_HSBC
2013/08/19
5K
0
美国创业公司所用到的Java开源建站工具

美国程序员Jon Scott Stevens,公布了他的创业公司所使用的开发工具清单。 他的语言平台是Java,开发项目是一个网站(还未上线)。所用到的工具都是开源的,可以免费得到。 在目前的创业者之中...

磊神Ray
2011/08/25
445
2
resteasy如何上传文件

最近要开发一个上传文件的接口(目前上传图片),接口方法如下,但是前台通过form表单上传图片时总是报错,错误信息如下: Failed processing arguments of org.jboss.resteasy.spi.metadata...

RunChu
2015/08/26
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部