zoukankan      html  css  js  c++  java
  • SpringCloud中使用ES使用课程上下线

    我们现在需要把课程的分类做一个上下线的功能,在后台点击上线然后存入ES中,我们前端调用的使用就调用ES然后渲染界面

    创建一个微服务

    导入包pom

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    yml中开启

    server:
    port: 1080
    spring:
    application:
    name: search-service
    data:
    elasticsearch:
    cluster-nodes: 127.0.0.1:9300
    cluster-name: elasticsearch
    eureka:
    client:
    service-url:
    defaultZone: http://localhost:1010/eureka
    instance:
    prefer-ip-address: true
    instance-id: search-server:1080

     写一个Resposity

    @Repository
    public interface EsCourseElasticsearchRepository extends ElasticsearchRepository<ESCourseDoc,Long> {
    }

    通过把这个交给Spring管理就可以操作ES了

    写一个Controller

     /**
         *  这里我们到底需要什么对象因为数据区和索引区需要根据我们的需求制定DOC,
         *  所以我们封装数据的时候可以传过来处理也可以在传入的时候处理,主要是我们的业务什么需要分词
         *  什么不需要分词DOC文档
         */
        @PostMapping("/es/save")
        public AjaxResult save(@RequestBody ESCourseDoc esCourseDoc){
            try {
                courseElasticsearchRepository.save(esCourseDoc);
                return AjaxResult.me();
            } catch (Exception e) {
                e.printStackTrace();
                return AjaxResult.me().setSuccess(false).setResultObj("保存失败");
            }
        }
    
       
    
        @PostMapping("/es/del/{id}")
        public AjaxResult del(@PathVariable("id")Long id){
            try {
                courseElasticsearchRepository.deleteById(id);
                return AjaxResult.me();
            } catch (Exception e) {
                e.printStackTrace();
                return AjaxResult.me().setSuccess(false).setResultObj("保存失败");
            }
        }
    View Code

    因为是多服务我们开启一个配置类

    //创建配置类
    @Configuration
    @EnableFeignClients("cn.jiedada.hrm.fegin")
    public class ESCourseConfig {
    }
    View Code

    写入Fegin接口

    @FeignClient(value = "search-service",fallbackFactory = ESCourseClientFallbackFactory.class)
    public interface ESCourseClient  {
        @PostMapping("/es/save")
        AjaxResult save(@RequestBody ESCourseDoc esCourseDoc);
        @PostMapping("/es/del/{id}")
        AjaxResult del(@PathVariable("id")Long id);
    }
    View Code

    写FallbackFactroy

    @Component
    public class ESCourseClientFallbackFactory implements FallbackFactory<ESCourseClient> {
        @Override
        public ESCourseClient create(Throwable throwable) {
            return new ESCourseClient() {
                @Override
                public AjaxResult save(ESCourseDoc esCourseDoc) {
                    throwable.printStackTrace();
                    return AjaxResult.me().setSuccess(false).setResultObj("Es保存课程失败");
                }
    
                @Override
                public AjaxResult del(Long id) {
                    throwable.printStackTrace();
                    return AjaxResult.me().setSuccess(false).setResultObj("Es删除课程失败");
                }
    
        
            };
        }
    }

    在课程Controller中写入上线下线功能

     /**
        * 下线功能
        * @return Ajaxresult转换结果
        */
        @RequestMapping(value="/offLineCourse/{id}",method= RequestMethod.POST)
        public AjaxResult offLineCourse(@PathVariable("id")Long id){
            try {
                courseService.offLineCourse(id);
                return AjaxResult.me();
            } catch (Exception e) {
                e.printStackTrace();
                return AjaxResult.me().setMessage("保存对象失败!"+e.getMessage());
            }
        }
        /**
        * 上线功能
        * @return Ajaxresult转换结果
        */
        @RequestMapping(value="/onLineCourse/{id}",method= RequestMethod.POST)
        public AjaxResult onLineCourse(@PathVariable("id")Long id){
            try {
                courseService.onLineCourse(id);
                return AjaxResult.me();
            } catch (Exception e) {
                e.printStackTrace();
                return AjaxResult.me().setMessage("保存对象失败!"+e.getMessage());
            }
        }
    View Code

    service

    //判断选入课程是否上线
        //如果没有上线则修改状态为上线状态
        //修改数据中的状态
        //保存到ES中去
        @Override
        public void onLineCourse(Long id) {
            Course course = baseMapper.selectById(id);
            if(course.getStatus()== 1){
                throw new RuntimeException("该课程为上线状态请勿修改");
            }
            course.setStatus(1);
            updateById(course);
            CourseMarket courseMarket = courseMarketMapper.selectById(id);
            CourseDetail courseDetail = courseDetailMapper.selectById(id);
    
            ESCourseDoc esCourseDoc = new ESCourseDoc();
            //属性拷贝
            esCourseDoc.setStartTime(new Date());
            BeanUtils.copyProperties(courseMarket,esCourseDoc);
            BeanUtils.copyProperties(course,esCourseDoc);
            BeanUtils.copyProperties(courseDetail,esCourseDoc);
            AjaxResult ajaxResult = esCourseClient.save(esCourseDoc);
            //如果保存失败
            if (!ajaxResult.isSuccess()){
                log.error("保存到ES中失败");
                throw new RuntimeException("保存到ES中失败");
            }
        }
    
        @Override
        public void offLineCourse(Long id) {
            Course course = baseMapper.selectById(id);
            if(course.getStatus()== 0){
                throw new RuntimeException("该课程为下线状态请勿修改");
            }
            course.setStatus(0);
            updateById(course);
    
            AjaxResult ajaxResult = esCourseClient.del(id);
            //如果保存失败
            if (!ajaxResult.isSuccess()){
                log.error("删除ES中失败");
                throw new RuntimeException("删除ES中失败");
            }
        }
    View Code

    完成

  • 相关阅读:
    动态列 Excel 导出
    Smart Thread Pool (智能线程池)
    Nuget Server 搭建
    hadoop 分布式集群安装
    DRF 基本功能梳理 demo
    docker 相关梳理
    Python 开发面试梳理
    结合 element-ui 对 Vue 相关知识点整理 (router,axios,Vuex )
    VUE 相关工具 vue-cli/webpack/vue-router
    Vue 基础语法相关特性
  • 原文地址:https://www.cnblogs.com/xiaoruirui/p/13664970.html
Copyright © 2011-2022 走看看