Elasticsearch5.5+SpringBoot 2.0实践
来源:互联网 发布:caffe中softmax 编辑:程序博客网 时间:2024/06/07 18:20
1. 开发准备
1.1. es5.5.1准备
- 下载地址:https://www.elastic.co/downloads/elasticsearch
- linux安装请看上一篇文章。
1.2. SpringBoot下载
- 下载地址 http://start.spring.io/
- 选择版本 2.0.0 M3
1.3. pom.xml详细配置如下
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.M3</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <elasticsearch.version>5.5.0</elasticsearch.version> <elasticsearch.client.version>5.5.1</elasticsearch.client.version> <spring.data.elasticsearch.version>3.0.0.RC2</spring.data.elasticsearch.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>${elasticsearch.client.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${elasticsearch.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/com.google.collections/google-collections --> <dependency> <groupId>com.google.collections</groupId> <artifactId>google-collections</artifactId> <version>1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/joda-time/joda-time --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-libs-snapshot</id> <name>Spring Snapshot Repository</name> <url>http://repo.spring.io/libs-snapshot</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories></project>
2. Java代码
代码结构如下
com.example.demo.model.SipBean
com.example.demo.dao.SipRepository
com.example.demo.service.SipService
com.example.demo.service.impl.SipServiceImpl
com.example.demo.action.SipController
com.example.demo.DemoApplication
2.1. model包
自己定义的类
package com.example.demo.model;import java.util.Date;import org.springframework.data.annotation.Id;import org.springframework.data.elasticsearch.annotations.Document;@Document(indexName = "t_sip", type = "sip", shards = 1, replicas = 0, refreshInterval = "-1") public class SipBean { @Id private Integer id; private Integer actiontype; private Integer areaid; private String assetid; private Integer bandwidth; private String c1url; private String destination; private String dstip; private Integer dstport; private String frequency; private String groupcode; private String programno; private String purchasetoken; private String qamname; private String requestheader; private String responseheader; private Integer responsetime; private Integer scale; private String sessionid; private String sn; private String source; private String srcip; private Integer srcport; private Integer statuscode; private String statusmsg; private Date time; private String url; public SipBean() { } public SipBean(Integer id, Integer actiontype, Integer areaid, String assetid, Integer bandwidth, String c1url, String destination, String dstip, Integer dstport, String frequency, String groupcode, String programno, String purchasetoken, String qamname, String requestheader, String responseheader, Integer responsetime, Integer scale, String sessionid, String sn, String source, String srcip, Integer srcport, Integer statuscode, String statusmsg, Date time, String url) { this.id = id; this.actiontype = actiontype; this.areaid = areaid; this.assetid = assetid; this.bandwidth = bandwidth; this.c1url = c1url; this.destination = destination; this.dstip = dstip; this.dstport = dstport; this.frequency = frequency; this.groupcode = groupcode; this.programno = programno; this.purchasetoken = purchasetoken; this.qamname = qamname; this.requestheader = requestheader; this.responseheader = responseheader; this.responsetime = responsetime; this.scale = scale; this.sessionid = sessionid; this.sn = sn; this.source = source; this.srcip = srcip; this.srcport = srcport; this.statuscode = statuscode; this.statusmsg = statusmsg; this.time = time; this.url = url; } .... getter setter ... }
2.2. dao层
集成了ElasticsearchRepository类,里面已经实现了基本的方法,service层可以直接调用;
package com.example.demo.dao;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;import com.example.demo.model.SipBean;import java.util.List;public interface SipRepository extends ElasticsearchRepository<SipBean, Integer> { /** *自己定义的,按照sn查询 */ @Query("{\"bool\" : {\"must\" : {\"term\" : {\"sn\" : \"?0\"}}}}") Page<SipBean> findBySn(String sn, Pageable pageable);}
2.3. service层
具体实现的业务代码
显示接口定义SipService
package com.example.demo.service;import java.util.List;import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import com.example.demo.model.SipBean;public interface SipService { public SipBean findSip(Integer id); public List<SipBean> findSipList(); Page<SipBean> findBySn(String sn, Integer pageNumber, Integer pageSize); Page<SipBean> findByFuzzyQuery(String field,String value, Integer pageNumber, Integer pageSize); Page<SipBean> findByMutliQuery(String start,String end, String field,String value, Integer pageNumber, Integer pageSize); Page<SipBean> findAll(Integer pageNumber, Integer pageSize) ;}
下面是Service的具体实现类
package com.example.demo.service.impl;import java.util.ArrayList;import java.util.List;import java.util.Optional;import org.elasticsearch.action.search.SearchRequestBuilder;import org.elasticsearch.index.query.BoolQueryBuilder;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.builder.SearchSourceBuilder;import org.elasticsearch.search.sort.SortBuilder;import org.elasticsearch.search.sort.SortBuilders;import org.elasticsearch.search.sort.SortOrder;import org.joda.time.format.DateTimeFormat;import org.joda.time.format.DateTimeFormatter;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.domain.Sort;import org.springframework.data.domain.Sort.Direction;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Service;import com.example.demo.dao.SipRepository;import com.example.demo.model.SipBean;import com.example.demo.service.SipService;import com.google.common.collect.Lists;@Servicepublic class SipServiceImpl implements SipService { @Autowired private SipRepository sipRepository; /** * 按照id查詢 */ @Override public SipBean findSip(Integer id) { Optional<SipBean> opt = sipRepository.findById(id); return opt.get(); } /** *數據不多的時候,返回所有的記錄 */ @Override public List<SipBean> findSipList() { Iterable<SipBean> elements = sipRepository.findAll(); List<SipBean> list = Lists.newArrayList(elements); return list; } /** * 分頁查詢,帶條件 */ @Override public Page<SipBean> findBySn(String sn, Integer pageNumber, Integer pageSize) { // TODO Auto-generated method stub QueryBuilder query = QueryBuilders.matchQuery("sn",sn); Pageable pageable = PageRequest.of(pageNumber, pageSize); return sipRepository.search(query, pageable); } /** * 分頁查詢 */ @Override public Page<SipBean> findAll(Integer pageNumber, Integer pageSize) { Pageable pageable = PageRequest.of(pageNumber, pageSize); return sipRepository.findAll(pageable); } /** * 分頁。模糊查詢 */ @Override public Page<SipBean> findByFuzzyQuery(String field,String value, Integer pageNumber, Integer pageSize) { QueryBuilder query = QueryBuilders.fuzzyQuery(field, value); Pageable pageable = PageRequest.of(pageNumber, pageSize); return sipRepository.search(query, pageable); } /** * 分頁,時間,排序查詢 */ @Override public Page<SipBean> findByMutliQuery(String start, String end, String field, String value, Integer pageNumber, Integer pageSize) { DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); long istart = format.parseDateTime(start).getMillis(); long iend = format.parseDateTime(end).getMillis(); BoolQueryBuilder query = QueryBuilders.boolQuery() .must(QueryBuilders.rangeQuery("time").lte(iend).gte(istart)); if(field!=null && !"".equals(field)){ query.must(QueryBuilders.fuzzyQuery(field, value)); } Pageable pageable = PageRequest.of(pageNumber, pageSize,Sort.by("sn")); //Pageable pageable2 = PageRequest.of(pageNumber, pageSize,Direction.ASC,"sn","time"); return sipRepository.search(query, pageable); }}
2.4 action层
界面调用的代码
package com.example.demo.action;import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Page;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;import com.example.demo.model.SipBean;@RestController@RequestMapping(value = "/sip")public class SipController {protected final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private com.example.demo.service.SipService sipService; /** * 按照ID查詢 * @param id * @return */ @RequestMapping(value = "/getSipById") @ResponseBody public Object getSipById(Integer id){ SipBean sip =sipService.findSip(id); return sip; } @RequestMapping(value = "/getSipList") @ResponseBody public Object getSipList(){ List<SipBean> sips =sipService.findSipList(); return sips; } @RequestMapping(value = "/getSipByPage") @ResponseBody public Page<SipBean> getSipByPage(Integer pageNumber, Integer pageSize) { Page sips =sipService.findAll(pageNumber, pageSize); return sips; } @RequestMapping(value = "/getSipBySn") @ResponseBody public Page<SipBean> getSipBySn(String sn,Integer pageNumber, Integer pageSize) { Page sips =sipService.findBySn(sn, pageNumber, pageSize); return sips; } @RequestMapping(value = "/getSipByFuzzyQuery") @ResponseBody public Page<SipBean> getSipByFuzzyQuery(String field,String value,Integer pageNumber, Integer pageSize) { Page sips =sipService.findByFuzzyQuery(field, value, pageNumber, pageSize); return sips; } @RequestMapping(value = "/findByMutliQuery") @ResponseBody public Page<SipBean> getMutliQuery(String start,String end,String field,String value,Integer pageNumber, Integer pageSize) { Page sips =sipService.findByMutliQuery(start,end,field, value, pageNumber, pageSize); return sips; } }
2.5. SpringBoot启动代码
package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.ComponentScan;import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;@SpringBootApplication@EnableElasticsearchRepositories@ComponentScan("com.example.demo")public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
3. Elasticsearch连接配置
前提是你的Elasticsearch已经配置好,可以正常使用,集群或者单个都使用,稍微改动就可以了
logging.level.com.example=DEBUGlogging.level.org.springframework.data.elasticsearch=DEBUGspring.mvc.throw-exception-if-no-handler-found=truespring.resources.add-mappings=falsespring.data.elasticsearch.cluster-name=es-applicationspring.data.elasticsearch.cluster-nodes=172.17.5.223:9300,172.17.5.53:9300spring.data.elasticsearch.local=false spring.data.elasticsearch.repositories.enabled=true
到此,新版的es 和springboot代码已经配置完,后面就可以用写简单工具来测试。
4.测试工具
我用的工具是postman,需要的同学可以导官网上下载,后台开发必备利器!
https://www.getpostman.com/postman
阅读全文
0 0
- Elasticsearch5.5+SpringBoot 2.0实践
- SpringBoot + Elasticsearch5.x
- SpringBoot实践
- SpringBoot实践
- SpringBoot实践
- SpringBoot实践
- SpringBoot实践
- Springboot实践
- Centos6.5下Elasticsearch5.2.1及head插件的安装(实践成功)
- linux安装elasticsearch5.5
- SpringBoot开发实践-起步
- SpringBoot开发实践-datasource
- Springboot实践系列
- [置顶]SpringBoot实践
- [置顶]SpringBoot实践
- springBoot集成mybatis实践
- Elasticsearch5.2.0离线安装bigdesk
- [工具]Centos7安装ElasticSearch5.5
- 无法获得锁/var/lib/dpkg/lock-open(11:资源暂时不可用)Ubuntu 16.04 安装VIM报错
- Python的一些进阶学习-2017.08.16
- UGUI 查找按钮名称
- 通过JS语句判断WEB网站的访问端是电脑还是手机
- 今天无意中发现JavaBean类基本都要求实现了Serializable接口,以前只是知道序列化以后,可以通过io流的方式将对象序列化和反序列化,进行存取,但不知道为什么需要序列化,今天总结一下
- Elasticsearch5.5+SpringBoot 2.0实践
- SpringBoot中的Junit测试
- 线程的问题
- [RK3288][Android5.1] 让开机动画(BootAnimation)提前一秒结束
- ubuntu16.04中安装JDK、eclipse、pydev教程
- 常用样式
- strace
- 修改端口号
- 2017多校第7场