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

    完成

  • 相关阅读:
    神奇的C语言
    实现代码编辑器
    实现了一个简单的key-value存储系统
    一些官网说明
    苹果用户转入mate30,被恶心到了
    吐嘈一下乱用注入
    谈一下OOP的乱用现象
    mongo3.x ssl版安装文件
    再谈LRU双链表内存管理
    cocos在win平台exe无法使用 UserDefault 解决方法
  • 原文地址:https://www.cnblogs.com/xiaoruirui/p/13664970.html
Copyright © 2011-2022 走看看