您当前的位置:网站首页>孟小冬,根据SpringBoot的WebAPI开发结构,福建天气

孟小冬,根据SpringBoot的WebAPI开发结构,福建天气

2019-04-01 11:38:54 投稿作者:admin 围观人数:399 评论人数:0次
依据SpringBoot的WebAPI开发结构

台有必要从头建立一个内部的开发结构,由于没有前史堆集,直接河南豫剧运用SpringBoot作为根底结构,在此之上再做一个封装。

共享出来给咱们参阅,此结构适应于中小企业Java完成科学的WebAPI项目(前后端别离)。咱们能够直接运用,可是最好仍是了解并修正成适用自己团队的结构。

1.根本结构

依据SpringBoot的WebAPI开发结构

如上图,咱们的结构包括许多库,其间d1.framework.webapi和d1.framework.cache是一切webapi项目都有必要依靠的,其它的库是看需求挑选依靠的。下面列出一切库的根本功用:

d1.framework.webapi: 事务项目依靠的根本库,包括springboot相关许多功用的封装,比方Application、Entity、Service、Controller等基类,还有swagger、跨域,权限一致认证,日志相关等等,后边独自阐明。

d1.framework.cache: 缓存相关的库,由于d1.framework.webapi依靠这个库,所以一切事务项目也都依靠它,一个接口外加ehcache和r惠普笔记本edis的完成,实践事务项目中挑选一种就能够。

d1.framework.storage: 不是有必要依靠的库,一个接口外加本地文件存储和七牛云存储的完成。

d1.framework.util:不是有必要依靠的库,完成一系列东西类,是在事务项目开发过程中逐步堆集的一些和事务无关的静态办法。

d1.framework.push:不是有必要依靠的库,完成极光推送,这个是咱们团队比较常用的app推送第三方库的封装。

d1.framework.sms:不是有必要依靠的库,一个接口外加二种第三方的短信封装,首要用于注册等短信验证。

d1.framework.weixin:不是有必要依靠的库,微信小程序、大众号、app等开发渠道相关封装。

d1.framework.ocr: 不是有必要依靠的库,封装了阿里的二个图形辨认效劳,也是实践事务项目用到了后封装的。

d1.framework.mqttclient:不是有必要依靠的库,是对mqtt协议的完成,也是对一个开源库的封装。

2. 根本阐明

springboot现已十分便利了,可是仍是有必要把一些重复的不变的功用封装成结构,开发结构和开发事务应该分隔。

结构里有一些咱们团队特有的约好,并不必定合适一切人的习气。

一切事务项目运用g孟小冬,依据SpringBoot的WebAPI开发结构,福建气候radle东西构建,首要是觉得gradle比mave孟小冬,依据SpringBoot的WebAPI开发结构,福建气候n更简练。

结构一切项目都上传到咱们内部的Nexus

建立的maven库,建立的办法能够参阅我以前发的贴。 事务项目经过gradle来装备依靠:

repositori海鱼es {

mavenCentral()

maven{ url 'http://你的nexus库地址/repository/d1-java/'}

}

除d1.framework.webapi库强制依靠springboot以外,其它库都没有依靠springboot,这样其它库也能够很便运用于非springboot的事务项目

大部分库都是先界说接口,再对这个接口进行完成,一般有好几种完成。

许多第三方库现已很简略了,可是仍是有必要做一次封装,首要仍是第三方库功用许多,可是咱们一般用到的很少,并且有许多缺省用法,封装后运用更简略,也能让第三方库版别改变后对现有事务项苹果官方目也没影响。

每个库项目都由一个springboot事务项目作为测验库的进口以及affect一个库实在完成的module,这个module修正完后build成jar包并推送到nexus效劳上。

一切事务项目都是在IDEA下开发,没有运用Eclipse。

结构是在事务项目不断的开发中逐步堆集和完善的,功用会越来越多,bug会越来越少。

3. 源码

源码都上传到github,下载后要跑起来还需修正:

建立自己的nexus效劳,或许改造事务项目生成jar包,然后运用本地依靠办法。

一切第三方对应的密钥信息都现已修正成一些随意的数字,保证安全性,

源码里除了结构库代码,还有一个d1project项目是用于运用框孟小冬,依据SpringBoot的WebAPI开发结构,福建气候架的一个webapi模板项目。假如新建一个事务项目能够经过复制这个项目作为根底。

d1.framework.webapi 库是根底封装,每个 webapi 项目都有必要运用,里边包括功用许多。

1. BaseApplication

一切事务项目的主进口 Application 类都需承继此类

@SpringBootApplication

public class DemoApplication extends 孟小冬,依据SpringBoot的WebAPI开发结构,福建气候BaseApplication{

}

这个类首要是增加几个缺省注解,比方激活 Swagger,保证对包进行扫描是从 d1 开端。

所以约好咱们一切的事务项目的 package 都是 d1 最初,比方d1.project.xxxx

@EnableSwagger2

@ComponentScan("d1")

@EntityScan("d1")

@EnableJpaRepositories("d1")

public class BaseApplication {

}

2. 封装 webapi 接口的回来 Result

一切 controller 回来的值都是一个 Result 目标,根本结构是

{

"code": 1,

"msg": "回来的音讯,一般是字符串",

"data": "回来的数据,一般又是一个json目标"

}

运用办法:

retur猪肚n ResultUtil.result(10001,"自界说的音讯",数据目标);

return ResultUtil.fail("自界说的音讯",数据目标);

return ResultUtil.success("自界说的音讯",数据目标);

3. ControllerAdvice

运用注解 @ControllerAdvice 完成一致阻拦处理一切 controller 没有 catch 的过错

@ExceptionHandler(Exception.class)

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

@ResponseBody

public Result all(Exception e) {

return ResultUtil.result(ResultCode.UN_CATCH_ERROR.code, e.getMessage(), e);

}

4. 封装Swagger主动生成API文档

只需求在 application.properties 装备文件里增加以下几个装备,事务项目的 API 文档就能够主动生成并以效劳的办法来拜访,拜访的url是http://域名或地址/swagger-ui.html#/

#application.properties

d1.framework.webapi.swagger.enable=true #出产环境下一般改成false

d1.framework.webapi.swagger.title=项目的标题

d1.framework.webapi.swagger.desc=项目的描绘

d1.framework.webapi.swagger.version=项目API的版别

d1.framework.webapi.swagger.host=www.xxxx.com:8089

在 contorller 里运用注解符号 API 的办法参孟小冬,依据SpringBoot的WebAPI开发结构,福建气候考文档

4. 跨域设置

只需求在 application.properties 装备文件里增加以下装备,事务项目的前端页面能够完成跨域拜访,当然出产环境的孟小冬,依据SpringBoot的WebAPI开发结构,福建气候时分需求严格控制可跨辛夷域的域名。

#application.properties

#生成环境需求把*换成实在的域名,多个域名能够用逗号离隔

d1.framework.webapi.cors=*

5. BaseEntity

这是一切 Entity 的基类,首要是强行设置一个字段叫 Id,这个 Id 缺省是32位 uuid,在事务体系上主张一切 entity 都承继它。

6. User相关封装

DoUserBaseEntity 界说了用户表的常用字段,事务体系直接继棨怎样读承做一些扩展就能够了。

DoUserServiceImplBase 完成用户相关的 service,首要是创立 token,登录验证 token,缺省 token 都是用 d1.framework.cache 来缓存。

7. Auth相关

这儿也是依据团队内部的一个约好,一切 we覃远通bapi 接口假如需求验证权限,都需求在 http 恳求的 header 里设置 Authorization 特点,特点的值有2种状况:

Authorization = token xxxxxxx 表明是经过用户登录后回来的 token 来验证

Authorization = sign xxxxxxx 表明效劳间经过 HMAC 签名来校验

界说AuthFilter(承继Filter)来验证用户的恳求Header里的Auth边城浪子oriztion对应的值假如是token的话,从d1.framework.cache里对应的艳谈缓存里查询token是否存在并是否没有过期。

别的经过界说一个自界说的注解Auth来设定web api接口是归于某种特定的用户。

@Auth("webadmin")

@RestController

@RequestMapping("/webadmin/user")

@Api(value = "/webadmin/user", description = "办理用户办理")

public class WebAdminUserController extends DoBaseController {

......

}

@Auth("webadmin")标识这个controller里所荣成气候有办法都有必要是webadmin用户登录后才能够拜访,这个注解也能够独自给特定办法运用

8. DestroyEhcacheBean

JVM 退出时先 shutdown ehcache,保证内存里的 cache 内容正确写入本地文件

public class DestroyEhcacheBean implements Disp生长的烦恼osableBean, ExitCodeGenerator {

......

@Override

public void destroy() throws Excepti天津旅行攻略on {

if (cache != null)

cache.shutDown();

}

}

9. DoServiceImpBase

包括 service 常用办法,其它 service 都承继这个办法,里边首要包括根本的增修改查,这是一个 abstract 办法,最首要是需求子类承继的时分回来一个实践的 dao 类。

这个基类还孟小冬,依据SpringBoot的WebAPI开发结构,福建气候完成了依据 token 查询对应的用户目标。

public abstract class DoServiceImpBase {

......

protected abstract植物大战僵尸2攻略 JpaRepository getDao();

......

}

10. DoBaseController类

controller 基类,封装了最根本的增修改查,子类只需求承继,常见的接口都已界说。

11. 日志

在项目的resource下有一个 logback.xml,没有特别的需求的话,一切事务体系都能够用这个默许的日志装备。

别的界说了一个 LoggerController 完成经过 webapi 接口检查日志和下载日志文件,这样长途就能够检查日志。

12. HMACSignService

增加HMAC王郡楠校验签名的基类service, 完成了效劳间HMAC接口验证办法,规矩参阅微信的效劳校验

1庐山在哪3. SignInRetryLimitService

封装用户登录重试次数校验,超越必定次数将被锁住不能再试了。

需求在application.properties里增加2个装备:

#登录暗码过错重试的次数,没有这个值或值为0表明不约束

d1.framework.webapi.sign-in.retry-count=5

#登录暗码过错重试到必定次数后,锁住用户一段时间,单位是分钟

d1.framework.webapi.sign-in.lock-period=60

运用这个效劳经过3个函数:

if (user == null) throw new Exception("用户:" + username + "不存在");

if (retryService.verifyIsLocked(username)) throw new Exception("用户重试过错暗码屡次,导致用户被锁");

if (!user.getPassword().equals(password)) {

retryServi蚂蚁短租ce.signInWithWrongPwd(username);

throw new Exception("暗码不对");

}

retryService.signInSuccess(username);

以上是 d1.framework.webapi 的根本功用,许多功用都是在开发实践项目的过程中逐步增加上去的,包括的功用是杂七杂八的需求。

其它库都是针对特定的功用,这儿不逐个胪陈了。

the end
二手新闻编辑,做您的好助手