完整教程: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
