栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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"
      ]
    }
    

    配置读取源码如下:

    @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接口效果如下:

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

     
         cn.easy-es
         easy-es-boot-starter
         0.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

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

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1039197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号