- 一、前言
- 二、功能描述
- 三、具体实现
- 四、开源地址(含源码)
此框架主要针对SpringBoot项目各类功能做出封装,整合各类插件,提供简便快速用法;
二、功能描述已完成功能:
- 整合Mybatis Plus单表查询;
- 整合Swagger接口文档;
- 整合Druid配置多数据源;
- 封装全局异常捕获;
- 封装同字段对象间转换方法;
- 整合Mybatis Plus分页查询;
- 整合WebSocket服务端;
1)客户端注册;
2)消息推送;
3)针对IP推送; - 封装Word工具类;
1)提取Word中图片; - 封装读取本地Json配置工具类(新);
- 搭建ElasticSearch+kibana(新);
- 整合Easy-Es(新);
待整合功能
Nacos easy-es RabbitMQ Redis Debezium Cancel 请求拦截器 内部过滤器 常用工具类 gateway auth2 文件上传下载接口封装 hdfs/fastdfs文件存储 本地文件夹监控 文件读取 压缩包读取 数据库配置加密 切面 配置文件读取 日期自动填充 自定义注解转换 0-false三、具体实现
-
封装读取本地Json配置工具类
首先根据需求编写配置文件目录为(resources/config/Equipment.json)内容如下:Equipment.json { "CT": [ "M4A1-S", "USP-S", "Knife", "FlashBomb" ], "T": [ "AWP", "Glock", "Knife" ] }
配置读取源码如下:
@Slf4j public class JsonConfig { private static Map
> equipmentMap = new LinkedHashMap<>(); public static void initConfig() { try { equipmentMap = JSON.parseObject(new ClassPathResource("/config/Equipment.json").getInputStream(), Map.class); } catch (IOException e) { log.error("【配置读取】读取Json配置失败"); e.printStackTrace(); } log.info("【配置读取】初始化Json配置完成"); } public static Map > getEquipmentMap() { return equipmentMap; } } 注意:需要在项目启动时初始化配置读取 initConfig(),代码如下:
@SpringBootApplication @MapperScan("com.ryan.fw.mapper") @EsMapperScan("com.ryan.fw.easyes.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); //初始化json数据 JsonConfig.initConfig(); } }
服务启动请求Swagger接口效果如下:
-
整简单搭建ElasticSearch + Kibana;
服务采用Docker部署,点击跳转
镜像采用 nshou/elasticsearch-kibana 为ElasticSearch+Kibana合并镜像镜像拉取:docker pull nshou/elasticsearch-kibana 启动命令:docker run -d -p 9200:9200 -p 5601:5601 nshou/elasticsearch-kibana
启动成功后可访问: 127.0.0.1:9200 127.0.0.1:5601 查看状态
查看镜像状态:docker ps 效果如下:
-
整合Easy-ES操作ElasticSearch;
官网连接:https://www.easy-es.cn/
Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称MP),那么您基本可以零学习成本直接上手EE,EE是MP的Es平替版,在有些些方面甚至比MP更简单,同时也融入了更多Es独有的功能,助力您快速实现各种场景的开发.
依赖如下:cn.easy-es easy-es-boot-starter0.9.80 此案例仅对单个索引进行操作,实体如下:
@TableName("fw_book") @Data @ToString @EqualsAndHashCode(callSuper = true) @IndexName("fw_book") public class BookDO extends BaseDO { @TableId(type = IdType.AUTO) @IndexId(type = cn.easyes.common.enums.IdType.CUSTOMIZE) private Long id; private String name; private BigDecimal price; private String author; private String type; private String description; }
使用此框架需配置mapper与mapper扫描,详情代码如下:
注意:此es的mapper要与Mybatis-Plus的mapper区分位置;
@Component public interface BookEsMapper extends BaseEsMapper
{ } @SpringBootApplication @MapperScan("com.ryan.fw.mapper") @EsMapperScan("com.ryan.fw.easyes.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); //初始化json数据 JsonConfig.initConfig(); } }
针对此实体简单封装各类方法,接口如下:
public interface BookService extends IService
{ public BookVO one(Long id); public List getAllBooks(); public Boolean syncEsAllBooks(); public List getAllEsBooks(); public Boolean deleteAllEsBooks(); public Map contrastEsAndDb(); } 具体实现类如下:
@Slf4j @Service public class BookServiceImpl extends ServiceImpl
implements BookService { @Resource private BookEsMapper bookEsMapper; @Override public BookVO one(Long id) { BookDO bookDO = this.getById(id); ObjUtils.checkNull(bookDO, "当前id:" + id + "无法确认图书信息"); return ObjUtils.convert(bookDO, BookVO.class); } @Override public List getAllBooks() { return ObjUtils.toList(super.list(), BookVO.class); } @Override public Boolean syncEsAllBooks() { List list = super.list(); if (bookEsMapper.existsIndex("fw_book")) { for (BookDO bookDO : list) { BookDO es = bookEsMapper.selectById(bookDO.getId()); if (Objects.nonNull(es)) { bookEsMapper.updateById(bookDO); } else { bookEsMapper.insert(bookDO); } } } else { list.forEach(item -> bookEsMapper.insert(item)); } return true; } @Override public List getAllEsBooks() { try { List list = bookEsMapper.selectList(new LambdaEsQueryWrapper<>()); return ObjUtils.toList(list, BookVO.class); } catch (UndeclaredThrowableException e) { throw new RuntimeException("【索引无效】fw_book不存在"); } } @Override public Boolean deleteAllEsBooks() { return bookEsMapper.deleteIndex("fw_book"); } @Override public Map contrastEsAndDb() { Map map = new HashMap<>(2); if (bookEsMapper.existsIndex("fw_book")) { Integer num = 500; long start = System.currentTimeMillis(); for (int i = 0; i <= num; i++) { this.getAllBooks(); } map.put("DB", "【查询对比】DB查询耗时:" + (System.currentTimeMillis() - start)); for (int i = 0; i <= num; i++) { this.getAllEsBooks(); } map.put("ES", "【查询对比】ES查询耗时:" + (System.currentTimeMillis() - start)); } return map; } } 最终Swagger调用接口,结果如下:
数据库查询:ES查询:
GitHub: https://github.com/fsyxjwxw/SpringBoot-Framework
如有其他想法或想要整合的插件请与本人联系;