完整教程:Springboot 2.2整合

  • 2019 年 11 月 12 日
  • 筆記

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/chengyuqiang/article/details/102938266

请注意,SpringBoot是2.2.0.RELEASE才兼容elasticsearch 7.x

废话不多说,直接上代码。

1、pom

<?xml version="1.0" encoding="UTF-8"?>  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">      <modelVersion>4.0.0</modelVersion>      <parent>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-parent</artifactId>          <version>2.2.0.RELEASE</version>          <relativePath/> <!-- lookup parent from repository -->      </parent>      <groupId>com.cntaiping.tpa</groupId>      <artifactId>ems</artifactId>      <version>0.0.1-SNAPSHOT</version>      <name>ems</name>      <description>Demo project for Spring Boot</description>        <properties>          <java.version>11</java.version>          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>          <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>      </properties>        <repositories>          <repository>              <id>nexus-aliyun</id>              <name>Nexus aliyun</name>              <url>http://maven.aliyun.com/nexus/content/groups/public</url>          </repository>      </repositories>        <dependencies>          <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter</artifactId>          </dependency>          <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter-web</artifactId>          </dependency>          <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter-data-elasticsearch</artifactId>          </dependency>          <dependency>              <groupId>org.projectlombok</groupId>              <artifactId>lombok</artifactId>              <optional>true</optional>          </dependency>          <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter-test</artifactId>              <scope>test</scope>              <exclusions>                  <exclusion>                      <groupId>org.junit.vintage</groupId>                      <artifactId>junit-vintage-engine</artifactId>                  </exclusion>              </exclusions>          </dependency>      </dependencies>        <build>          <plugins>              <plugin>                  <groupId>org.springframework.boot</groupId>                  <artifactId>spring-boot-maven-plugin</artifactId>                  <configuration>                      <mainClass>com.cntaiping.tpa.EmsApplication</mainClass>                  </configuration>                  <executions>                      <execution>                          <goals>                              <goal>repackage</goal>                          </goals>                      </execution>                  </executions>              </plugin>          </plugins>      </build>    </project>

2、application.properties

server.port=8080  server.servlet.context-path=/ems    #https://blog.csdn.net/haohaifeng002/article/details/102887921  spring.elasticsearch.rest.uris=http://localhost:9200  spring.elasticsearch.rest.username=elastic  spring.elasticsearch.rest.password=123456

3、实体类

package com.cntaiping.tpa.bean;    import lombok.Data;  import lombok.NoArgsConstructor;  import lombok.experimental.Accessors;  import org.springframework.data.annotation.Id;  import org.springframework.data.elasticsearch.annotations.Document;  import org.springframework.data.elasticsearch.annotations.Field;  import org.springframework.data.elasticsearch.annotations.FieldType;    @Data  @NoArgsConstructor  @Accessors(chain = true)  @Document(indexName = "ems",type = "_doc", shards = 1, replicas = 0)  public class DocBean {        @Id      private Long id;        @Field(type = FieldType.Keyword)      private String firstCode;        @Field(type = FieldType.Keyword)      private String secordCode;        @Field(type = FieldType.Text, analyzer = "ik_max_word")      private String content;        @Field(type = FieldType.Integer)      private Integer type;        public DocBean(Long id,String firstCode,String secordCode,String content,Integer type){          this.id=id;          this.firstCode=firstCode;          this.secordCode=secordCode;          this.content=content;          this.type=type;      }  }

4、持久化层

package com.cntaiping.tpa.dao;  import com.cntaiping.tpa.bean.DocBean;  import org.springframework.data.domain.Page;  import org.springframework.data.domain.Pageable;  import org.springframework.data.elasticsearch.annotations.Query;  import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;  public interface ElasticRepository extends ElasticsearchRepository<DocBean, Long> {        //默认的注释      //@Query("{"bool" : {"must" : {"field" : {"content" : "?"}}}}")      Page<DocBean> findByContent(String content, Pageable pageable);        @Query("{"bool" : {"must" : {"field" : {"firstCode.keyword" : "?"}}}}")      Page<DocBean> findByFirstCode(String firstCode, Pageable pageable);        @Query("{"bool" : {"must" : {"field" : {"secordCode.keyword" : "?"}}}}")      Page<DocBean> findBySecordCode(String secordCode, Pageable pageable);      }

5、业务逻辑层

package com.cntaiping.tpa.service;    import com.cntaiping.tpa.bean.DocBean;  import org.springframework.data.domain.Page;  import org.springframework.data.domain.Pageable;    import java.util.Iterator;  import java.util.List;    public interface IElasticService {        void createIndex();        void deleteIndex(String index);        void save(DocBean docBean);        void saveAll(List<DocBean> list);        Iterator<DocBean> findAll();        Page<DocBean> findByContent(String content);        Page<DocBean> findByFirstCode(String firstCode);        Page<DocBean> findBySecordCode(String secordCode);        Page<DocBean> query(String key);  }
package com.cntaiping.tpa.service.impl;    import com.cntaiping.tpa.bean.DocBean;  import com.cntaiping.tpa.dao.ElasticRepository;  import com.cntaiping.tpa.service.IElasticService;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.data.domain.Page;  import org.springframework.data.domain.PageRequest;  import org.springframework.data.domain.Pageable;  import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;  import org.springframework.stereotype.Service;    import javax.print.Doc;  import java.util.Iterator;  import java.util.List;    @Service("elasticService")  public class ElasticServiceImpl implements IElasticService {        @Autowired      private ElasticsearchRestTemplate elasticsearchTemplate;      @Autowired      private ElasticRepository elasticRepository;        private Pageable pageable = PageRequest.of(0,10);        @Override      public void createIndex() {          elasticsearchTemplate.createIndex(DocBean.class);      }        @Override      public void deleteIndex(String index) {          elasticsearchTemplate.deleteIndex(index);      }        @Override      public void save(DocBean docBean) {          elasticRepository.save(docBean);      }        @Override      public void saveAll(List<DocBean> list) {          elasticRepository.saveAll(list);      }        @Override      public Iterator<DocBean> findAll() {          return elasticRepository.findAll().iterator();      }        @Override      public Page<DocBean> findByContent(String content) {          return elasticRepository.findByContent(content,pageable);      }        @Override      public Page<DocBean> findByFirstCode(String firstCode) {          return elasticRepository.findByFirstCode(firstCode,pageable);      }        @Override      public Page<DocBean> findBySecordCode(String secordCode) {          return elasticRepository.findBySecordCode(secordCode,pageable);      }        @Override      public Page<DocBean> query(String key) {          return elasticRepository.findByContent(key,pageable);      }  }

6、控制层

package com.cntaiping.tpa.controller;    import com.cntaiping.tpa.bean.DocBean;  import com.cntaiping.tpa.bean.FundInfoBean;  import com.cntaiping.tpa.service.IElasticService;  import lombok.extern.log4j.Log4j2;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.web.bind.annotation.GetMapping;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.RestController;    import java.util.ArrayList;  import java.util.Iterator;  import java.util.List;    @Log4j2  @RestController  @RequestMapping("/elastic")  public class ElasticController {        @Autowired      private IElasticService elasticService;        @GetMapping("/init")      public void init(){          elasticService.createIndex();          List<DocBean> list =new ArrayList<>();          list.add(new DocBean(1L,"XX0193","XX8064","xxxxxx",1));          list.add(new DocBean(2L,"XX0210","XX7475","xxxxxxxxxx",1));          list.add(new DocBean(3L,"XX0257","XX8097","xxxxxxxxxxxxxxxxxx",1));          elasticService.saveAll(list);        }        @GetMapping("/all")      public Iterator<DocBean> all(){          return elasticService.findAll();      }    }

7、运行

http://localhost:8080/ems/elastic/init

http://localhost:8080/ems/elastic/all