SpringBoot一站式功能提供框架(三)整合ElasticSearch、EasyES、读取本地Json配置--柚子真好吃

SpringBoot一站式功能提供框架(三)整合ElasticSearch、EasyES、读取本地Json配置--柚子真好吃

一、前言

此框架主要针对SpringBoot项目各类功能做出封装,整合各类插件,提供简便快速用法;

二、功能描述

已完成功能:

  1. 整合Mybatis Plus单表查询;
  2. 整合Swagger接口文档;
  3. 整合Druid配置多数据源;
  4. 封装全局异常捕获;
  5. 封装同字段对象间转换方法;
  6. 整合Mybatis Plus分页查询;
  7. 整合WebSocket服务端;
    1)客户端注册;
    2)消息推送;
    3)针对IP推送;
  8. 封装Word工具类;
    1)提取Word中图片;
  9. 封装读取本地Json配置工具类(新);
  10. 搭建ElasticSearch+kibana(新);
  11. 整合Easy-Es(新);

待整合功能

Nacos
easy-es
RabbitMQ
Redis
Debezium
Cancel
请求拦截器
内部过滤器
常用工具类
gateway
auth2
文件上传下载接口封装
hdfs/fastdfs文件存储
本地文件夹监控
文件读取
压缩包读取
数据库配置加密
切面
配置文件读取
日期自动填充
自定义注解转换 0-false

三、具体实现

  1. 封装读取本地Json配置工具类
    首先根据需求编写配置文件目录为(resources/config/Equipment.json)内容如下:

    Equipment.json
    {
      "CT": [
        "M4A1-S",
        "USP-S",
        "Knife",
        "FlashBomb"
      ],
      "T": [
        "AWP",
        "Glock",
        "Knife"
      ]
    }
    

    配置读取源码如下:

    /**
     * @author Ryan
     * @date 2022/8/6 16:56
     * @description 读取JSON配置文件
     */
    @Slf4j
    public class JsonConfig {
    
        private static Map<String, List<String>> 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<String, List<String>> getEquipmentMap() {
            return equipmentMap;
        }
    }
    
     注意:需要在项目启动时初始化配置读取 initConfig(),代码如下:
    
    /**
     * @author Ryan
     * @date 2022-07-27
     * @description 启动类
     */
    @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接口效果如下:
    在这里插入图片描述

  2. 整简单搭建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 效果如下:
    

    在这里插入图片描述

  3. 整合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独有的功能,助力您快速实现各种场景的开发.
    依赖如下:

     <dependency>
         <groupId>cn.easy-es</groupId>
         <artifactId>easy-es-boot-starter</artifactId>
         <version>0.9.80</version>
     </dependency>
    

    此案例仅对单个索引进行操作,实体如下:

    /**
     * @author Ryan
     * @date 2022/8/8 9:36
     * @description 图书-实体
     */
    @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区分位置;
    
    /**
     * @author Ryan
     * @date 2022/8/8 17:33
     * @description
     */
    @Component
    public interface BookEsMapper extends BaseEsMapper<BookDO> {
    
    }
    
    /**
     * @author Ryan
     * @date 2022-07-27
     * @description 启动类
     */
    @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();
        }
    
    }
    

    针对此实体简单封装各类方法,接口如下:

    /**
     * @author Ryan
     * @date 2022/8/8 17:04
     * @description
     */
    public interface BookService extends IService<BookDO> {
    
        /**
         * 查询单条图书信息
         *
         * @param id 图书Id
         * @return
         */
        public BookVO one(Long id);
    
        /**
         * 查询全部图书信息
         *
         * @return
         */
        public List<BookVO> getAllBooks();
    
        /**
         * 同步全部图书信息至ES
         *
         * @return
         */
        public Boolean syncEsAllBooks();
    
        /**
         * 查询全部ES图书信息
         *
         * @return
         */
        public List<BookVO> getAllEsBooks();
    
        /**
         * 删除全部ES图书信息
         *
         * @return
         */
        public Boolean deleteAllEsBooks();
    
        /**
         * 对比Es与Mysql
         *
         * @return 响应信息
         */
        public Map<String, Object> contrastEsAndDb();
    
    }
    

    具体实现类如下:

    /**
     * @author Ryan
     * @date 2022/8/8 17:06
     * @description
     */
    @Slf4j
    @Service
    public class BookServiceImpl extends ServiceImpl<BookMapper, BookDO> 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<BookVO> getAllBooks() {
            return ObjUtils.toList(super.list(), BookVO.class);
        }
    
        @Override
        public Boolean syncEsAllBooks() {
            List<BookDO> 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<BookVO> getAllEsBooks() {
            try {
                List<BookDO> 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<String, Object> contrastEsAndDb() {
            Map<String, Object> 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

如有其他想法或想要整合的插件请与本人联系;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小金毛

可怜可怜孩子吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值