服务开发流程#
一、新建gitlab代码仓#
1. 仓库规范(推荐):#
DasAIoT(组)/EnterpriseAdmin(组)/{应用名称}(组)/{前后端}(组)/{微服务名称}(git仓库)应用名称:大的应用名称,一个应用下可能有多个git仓库
前后端:分Back-end(后端代码)和Fron-end(前端代码)
微服务名称:微服务名称
2. 仓库代码推送步骤#
Git 全局设置#
创建一个新仓库#
推送现有文件夹#
推送现有的 Git 仓库#
二、项目搭建#
1. 统一版本管理#
1. 项目pom.xml#
<parent>
<groupId>com.das</groupId>
<artifactId>dependency</artifactId>
<version>3.0.0</version>
</parent>
2. maven配置#
3. 直接依赖脚手架#
指定脚手架功能模块版本.项目pom.xml parent非dependency时2. 创建业务模块#
3. 依赖脚手架功能#
3.1 基础包#
<dependency>
<groupId>com.das.libcore</groupId>
<artifactId>commons-base</artifactId>
<version>3.0.0</version>
</dependency>
功能简介#
简介:存放各种公共的且和Spring无关的方法类定义使用说明#
常用公共类 | 用处 |
---|
R | 供Feign统一返回使用以及controller错误返回信息包装 |
ResultCode | 常用API返回对象,目前code和httpstatus绑定不能随意添加 |
GlobalRequestConstant | 全局请求信息相关key常量 |
ResultConstant | R 字段对应字符常量 |
GlobalInstanceContext | 用来存储全局唯一实例!多个线程可共享, 主要用来解耦Spring |
GlobalRequestDTO | 全局请求参数 |
TaskProgressDTO | 任务实体类,进度条 |
TaskStatusEnum | 进度条统一状态 |
ApplicationEnum | 应用类型枚举 |
UserGroupTagType | 用户组类型 |
UserTagEnum | 用户标签枚举 |
ApiException | 自定义API异常 |
BizException | 业务异常 |
AuthorizationDataUtil | 请求参数传递辅助类 |
3.2 spring封装包#
<dependency>
<groupId>com.das.libcore</groupId>
<artifactId>web-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
功能简介#
用处:存放各种公共的且和Spring相关的方法类定义
提供功能:包括异常拦截、统一返回类R、ip工具、Spring工具、servlet工具、解析jwt载荷工具等使用说明#
引入common-spring-boot-starter核心包依赖
类 | 说明 |
---|
IpUtils | ip相关工具类,可以获取请求真实IP地址 |
JwtBuilder | jwt工具类,可以构建jwt,目前载荷内容包括租户,用户id,姓名,是否是服务,flag |
JwtInfoUtils | jwt工具类,获取全局请求参数以及进行鉴权处理 |
ModelUtil | 基本模型数据填充工具类 |
PageUtils | 分页工具类 |
SecureUtils | 加解密工具类 |
SensitiveInfoUtil | 脱敏工具类,目前只有手机号脱敏方法 |
ServletUtils | 客户端工具类 |
SpringUtils | spring工具类,方便在非spring管理环境中获取bean |
SqlUtil | sql操作工具类 |
StringUtils | 字符串工具类,包括判空 去空格 截取等字符串相关操作 |
TimeZoneUtils | 时区时间转换,针对前端时间以及后端时间响应进行转换 |
ActionResult | 返回工具类,统一使用该类进行请求结果返回 |
CustomMsgResultCode | 参数校验抛出的异常,可自定义错误描述的ResultCode |
注解 | 说明 |
---|
@EnableJwtInfoAnnotation | 在启动类或者配置类上加上注解标识需要解析jwt信息的功能,因为放在common包里,避免只需要引入common其他功能但是不需要jwt解析功能 |
@Sensitive | 用于controller层或者service层的方法上面,判断返回数据是否需要脱敏相关处理 |
@SensitiveInfo | 用于属性上面,判断相关数据是否需要加密或脱敏相关处理 |
@SensitiveInput | 用于controller层或者service层的方法上面,判断入参数据是否需要加密处理 |
@WebLog | 用于方法上面,描述日志信息 |
@AllowableValues | 状态值校验工具 |
@XssCheckValid | Xss校验 |
在需要分页的地方使用工具类方法返回一个Page对象
com.das.libcore.web.utils.PageUtils的bulidPage(Integer pageNo, Integer pageSize)
参数说明:
pageNo 页码(不传有默认值1)
pageSize 页量(不传有默认值10)
3.3 自动生成代码包#
<dependency>
<groupId>com.das.libcore</groupId>
<artifactId>das-generator</artifactId>
<version>3.0.0</version>
</dependency>
功能简介#
用处:用于根据表一键生成controller、entity、service、serviceImpl、mapper、mapper.xml等基础的类使用说明#
3.
参数 | 说明 |
---|
String url | 数据库连接url |
String username | 数据库用户名 |
String password | 数据库密码 |
String schema | 指定的schema |
String tableName | 表名(多个用逗号分隔) |
String moduleName | 模块名(用于controller上面的api拼接的module,可以为空) |
String middlePath | 中间路径 文件生成的路径是定位在项目根路径的,需要指定到具体模块下的路径 |
String packagePath | 包路径 文件生成路径 /项目路径/模块路径/包路径/ |
String tablePrefix | 忽略表前缀 例如表为das_xxx 不想要加上 das_ 则值为 das_ |
String tableSuffix | 忽略表后缀 例如表为xxx_info 不想要加上 _info 则值为 _info |
3.4 规则引擎#
<dependency>
<groupId>com.das.libcore</groupId>
<artifactId>drools-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
功能简介#
使用说明#
类 | 说明 |
---|
RuleHelper | 可检测规则语法规范,获取指定的规则session |
RuleLoader | 规则加载器,动态加载规则 |
RuleInfoModel | 规则信息实体类 |
3.5 全球化#
<dependency>
<groupId>com.das.libcore</groupId>
<artifactId>globalization-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
功能简介#
使用说明#
引入globalization-spring-boot-starter核心包依赖
需要实现获取全球化资源的接口,然后注入到Spring中,这里可以具体定义全球化资源存储方式如:mysql,redis等,现在默认实现是sqlite,可以直接使用
全球化修改返回值是通过在通用返回类设置扩展接口实现的,相关默认实现在 DefaultUpdateResultAwareImpl 类中
默认只对错误msg进行了国际化,如需要序列化特定地方的常量数据,可自行注入messageSource然后取得locale进行手动国际化
3.6 Kafka服务#
<dependency>
<groupId>com.das.libcore</groupId>
<artifactId>kafka-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
功能简介#
使用说明#
接受数据
首先加上注解@EnableKafka("alarmEventConsumer") 开启kafka,EnableKafka中的value是group,但是KafkaListenter中的group优先级更高
3.7 mqtt#
<dependency>
<groupId>com.das.libcore</groupId>
<artifactId>mqtt-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
功能简介#
使用说明#
引入mqtt-spring-boot-starter核心包依赖
类 | 说明 |
---|
MsgHandle | 使用订阅功能时需要继承实现的接口类,重写MsgHandle#handleMsg方法 |
MqttConfiguration | mqtt配置类 |
MyMqttCallback | mqtt回调 |
MqttService | 对mqttClient简单封装,其中包括连接方法connect(),设置连接参数setMqttConnectOptions(),发布消息publish(),订阅主题subscribe(),取消订阅主题cleanTopic() |
使用方式
直接在需要的地方注入mqttService即可,但是如果需要使用订阅功能需要实现MsgHandler并通过mqttService.setMsgHandle(MsgHandle msgHandle)在容器启动完成注入到mqttService中如下:
3.8 pulsar消息队列#
<dependency>
<groupId>com.das.libcore</groupId>
<artifactId>pulsar-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
功能简介#
用处:对pulsar进行了封装,提供pulsar消息队列使用
关于topic的前置说明:pulsar的topic规范格式为:{是否持久化消息标识}://{租户}/{命名空间}/{自定义部分}
文档中提到的租户、命名空间 与pulsar中的topic规范格式相对应,文档中的topic通常指的为{自定义部分}
使用说明#
1. 引入pulsar-spring-boot-starter核心包依赖#
2. 配置#
脚手架重写了pulsar连接url, 脚手架连接串的格式为:pulsar://{pulsar服务}?auth={认证方式},{认证信息},admin-port={pulsar admin api端口},其他和pulsar原生配置一致。
认证方式:token, 认证信息为:token={token值}
basic, 认证信息为: u={账号},p={密码}
pulsar.tenant 下配置为请求pulsarcheck服务的配置信息
namespace-var: 为注解 @PulsarConsumer namespace中自定义配置的变量
3. 发送消息#
1.
脚手架发送消息相关的方法位于PulsarTemplate类中, 可根据数据类型不同调用PulsarTemplate不同方法。
2.
SendMsgMata 可配置生产者发送消息时的一些配置。参数说明:nameSpace: 消息的命名空间,默认default
messageTTLInSecond: 消息ttl时间,单位秒
delaySendTime:消息延时发送时间(毫秒)
delayTime:消息延时时间(毫秒),延时到指定时间发送
注:messageTTLInSecond 支持需开启服务端配置
配置文件:conf/broker.conf、conf/standalone.conf
配置项: topicLevelPoliciesEnabled=true
systemTopicEnabled=true4. 生产者脚手架默认实现功能