elasticsearch安装:https://blog.csdn.net/u012888052/article/details/79710429

ik分词安装:https://blog.csdn.net/u012888052/article/details/81941912

springboot整合:https://blog.csdn.net/chen_2890/article/details/83895646(这篇总结的很到位)

我这里主要将就geo的使用:

如果使用geo功能必须使用ElasticsearchTemplate,必须使用Mapping先去创建然后在添加数据,否则会出现geo类型错误

使用Repository基本查询:

依赖包

<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>Springboot-elasticsearch</groupId><artifactId>Springboot-elasticsearch</artifactId><version>0.0.1-SNAPSHOT</version><!-- 定义公共资源版本 --><!--<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.8.RELEASE</version><relativePath /></parent> --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.2.RELEASE</version><relativePath /></parent><dependencies><!-- elasticsearch --><!-- springboot-data-elasticsearch 提供了面向对象的方式操作elasticsearch --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.5</version><!--$NO-MVN-MAN-VER$ --></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

VehicleDto实体类

package com.es.dto;import java.io.Serializable;
import java.util.List;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;@Document(indexName = "vehicle", type = "special" , shards = 1, replicas = 0)
public class VehicleDto implements Serializable {private static final long serialVersionUID = -5483287283894740770L;@Idprivate Long id;@Field(type = FieldType.Text)private String carDriver;@Field(type = FieldType.Text)private String carType;//1:ik_smart:做最粗粒度的拆分;2:ik_max_word:做最细粒度的拆分@Field(type = FieldType.Text,analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")private String carName;@Field(type = FieldType.Text)private String status;@Field(type = FieldType.Text)private int price;//嵌套实体使用FieldType.Nested@Field(type=FieldType.Nested,includeInParent=true)private List<AddressPointDto> addressPointDto;public VehicleDto() {}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getCarDriver() {return carDriver;}public void setCarDriver(String carDriver) {this.carDriver = carDriver;}public String getCarType() {return carType;}public void setCarType(String carType) {this.carType = carType;}public String getCarName() {return carName;}public void setCarName(String carName) {this.carName = carName;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public List<AddressPointDto> getAddressPointDto() {return addressPointDto;}public void setAddressPointDto(List<AddressPointDto> addressPointDto) {this.addressPointDto = addressPointDto;}@Overridepublic String toString() {return "VehicleDto [id=" + id + ", carDriver=" + carDriver + ", carType=" + carType + ", carName=" + carName+ ", status=" + status + ", price=" + price + ", addressPointDto=" + addressPointDto + "]";}}

嵌套实体AddressPointDto

package com.es.dto;import java.io.Serializable;
import java.util.Date;import org.elasticsearch.common.geo.GeoPoint;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.annotations.GeoPointField;import com.fasterxml.jackson.annotation.JsonFormat;@Document(indexName ="vehiclepoint", type = "specialpoint" , shards = 1, replicas = 0)
public class AddressPointDto implements Serializable {private static final long serialVersionUID = -5483287283894740770L;@Idprivate Long id;//    @Field(type = FieldType.String)//1.5.8 spring-boot使用类型//1:ik_smart:做最粗粒度的拆分;2:ik_max_word:做最细粒度的拆分@Field(type = FieldType.Text,analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")//使用ik分词器private String name;//必须使用@Field注解,否则使用精确匹配查询字段需要type.Keyword
//  @Field(type = FieldType.Keyword)@Field(type = FieldType.Text)
//  @Field(type = FieldType.String)//1.5.8 spring-boot使用类型private String type;@Field( type = FieldType.Date,format = DateFormat.custom,pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat (shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date xjTime;//    @Field(type = FieldType.String,analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")//1.5.8 spring-boot使用类型@Field(type = FieldType.Text,analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")private String remark;@GeoPointFieldprivate GeoPoint address;public AddressPointDto() {}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;}public GeoPoint getAddress() {return address;}public void setAddress(GeoPoint address) {this.address = address;}public Date getXjTime() {return xjTime;}public void setXjTime(Date xjTime) {this.xjTime = xjTime;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}@Overridepublic String toString() {return "VehiclePointEsDto [id=" + id + ", name=" + name + ", type=" + type + ", xjTime=" + xjTime + ", remark="+ remark + ", address=" + address + "]";}}

VehicleRepository接口

package com.es.service;import java.util.List;import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;import com.es.dto.VehicleDto;@Component
public interface VehicleRepository extends ElasticsearchRepository<VehicleDto, Long>{/*** @return*/List<VehicleDto> findByCarDriver(String carDriver,Pageable pageable);/*** @param name* @return*/List<VehicleDto> findByAddressPointDtoName(String name,Pageable pageable); /*** @param id1* @param id2* @return*/List<VehicleDto> findByCarDriverAndPrice(String carDriver,int price,Pageable pageable);/*** @return*/List<VehicleDto> findByCarDriverOrCarType(String carDriver,String carType,Pageable pageable);/*** @param id1* @param id2* @return*/List<VehicleDto> findByPriceBetween(int price1, int price2);
}

VehicleService接口

package com.es.api;import java.util.List;import org.springframework.data.domain.Pageable;import com.es.dto.VehicleDto;public interface VehicleService {public void set(VehicleDto dto);public void setAll(Iterable<VehicleDto> ite);public void del(Long id);public VehicleDto findById(Long id);public List<VehicleDto> findAll();public List<VehicleDto> findCarDriver(String carDriver,Pageable pageable);public List<VehicleDto> findByAddressPointDtoName(String name,Pageable pageable); public List<VehicleDto> findByCarDriverAndPrice(String carDriver,int price,Pageable pageable);public List<VehicleDto> findByCarDriverOrCarType(String carDriver,String carType,Pageable pageable);public List<VehicleDto> findByPriceBetween(int price1, int price2);}

VehicleServiceImpl实现类

package com.es.service.impl;import java.util.List;
import java.util.Optional;import org.assertj.core.util.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;import com.es.api.VehicleService;
import com.es.dto.VehicleDto;
import com.es.service.VehicleRepository;@Service
public class VehicleServiceImpl implements VehicleService{private @Autowired VehicleRepository vehicleRepository;@Overridepublic void set(VehicleDto dto) {vehicleRepository.save(dto);}@Overridepublic void setAll(Iterable<VehicleDto> ite) {
//      vehicleRepository.save(ite);vehicleRepository.saveAll(ite);}@Overridepublic void del(Long id) {vehicleRepository.deleteById(id);}@Overridepublic VehicleDto findById(Long id) {
//      VehicleEsDto dto = vehicleRepository.findOne(id);
//      return dto;Optional<VehicleDto> dto = vehicleRepository.findById(id);return dto.get();}@Overridepublic List<VehicleDto> findAll() {List<VehicleDto> list = Lists.newArrayList(vehicleRepository.findAll());return list;}@Overridepublic List<VehicleDto> findCarDriver(String carDriver, Pageable pageable) {List<VehicleDto> list = vehicleRepository.findByCarDriver(carDriver, pageable);return list;}@Overridepublic List<VehicleDto> findByCarDriverAndPrice(String carDriver, int price, Pageable pageable) {List<VehicleDto> list = vehicleRepository.findByCarDriverAndPrice(carDriver, price, pageable);return list;}@Overridepublic List<VehicleDto> findByCarDriverOrCarType(String carDriver, String carType, Pageable pageable) {List<VehicleDto> list = vehicleRepository.findByCarDriverOrCarType(carDriver, carType, pageable);return list;}@Overridepublic List<VehicleDto> findByPriceBetween(int price1, int price2) {List<VehicleDto> list = vehicleRepository.findByPriceBetween(price1, price2);return list;}@Overridepublic List<VehicleDto> findByAddressPointDtoName(String name,Pageable pageable) {List<VehicleDto> list = vehicleRepository.findByAddressPointDtoName(name,pageable);return list;}}

ElasticsearchTemplate 使用

VehicleTemplateService接口

package com.es.api;import java.util.List;import com.es.dto.VehicleDto;public interface VehicleTemplateService {public void bulkIndex(List<VehicleDto> personList);public List<VehicleDto> queryForList(double lat, double lon);public List<VehicleDto> queryDto();}

VehicleTemplateServiceImpl实现类

package com.es.service.impl;import java.util.ArrayList;
import java.util.List;import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.query.GeoDistanceQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.sort.GeoDistanceSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Service;import com.es.api.VehicleTemplateService;
import com.es.dto.VehicleDto;@Service
public class VehicleTemplateServiceImpl implements VehicleTemplateService{private @Autowired ElasticsearchTemplate elasticsearchTemplate;public void bulkIndex(List<VehicleDto> vehicleDto) {int counter = 0;List<IndexQuery> queries = new ArrayList<>();//https://github.com/spring-projects/spring-data-elasticsearch/wiki/Geo-indexing-and-request//必须使用Mapping先去创建然后在添加数据,否则会出现geo类型错误elasticsearchTemplate.createIndex(VehicleDto.class);elasticsearchTemplate.putMapping(VehicleDto.class);for (VehicleDto vehiclePointEsDto : vehicleDto) {IndexQuery indexQuery = new IndexQuery();indexQuery.setId(vehiclePointEsDto.getId() + "");indexQuery.setObject(vehiclePointEsDto);//上面的那几步也可以使用IndexQueryBuilder来构建//IndexQuery index = new IndexQueryBuilder().withId(VehiclePointEsDto.getId() + "").withObject(VehicleDto).build();queries.add(indexQuery);if (counter % 500 == 0) {elasticsearchTemplate.bulkIndex(queries);queries.clear();System.out.println("bulkIndex counter : " + counter);}counter++;}if (queries.size() > 0) {elasticsearchTemplate.bulkIndex(queries);System.out.println("运行完成");}System.out.println("bulkIndex completed.");}/***geo_distance: 查找距离某个中心点距离在一定范围内的位置geo_bounding_box: 查找某个长方形区域内的位置geo_distance_range: 查找距离某个中心的距离在min和max之间的位置geo_polygon: 查找位于多边形内的地点。sort可以用来排序*/@Overridepublic List<VehicleDto> queryForList(double lat, double lon) {Long nowTime = System.currentTimeMillis();//查询某经纬度10000米范围内GeoDistanceQueryBuilder builder = QueryBuilders.geoDistanceQuery("addressPointDto.address").point(lat, lon).distance(10000, DistanceUnit.METERS);GeoDistanceSortBuilder sortBuilder = SortBuilders
//              .geoDistanceSort("address").geoDistanceSort("addressPointDto.address",new GeoPoint(lat, lon))//高版本使用.point(lat, lon).unit(DistanceUnit.METERS).order(SortOrder.ASC);//分页查询50条
//      Pageable pageable = new PageRequest(0, 50);//查询经纬度10000米范围内,并根据坐标排序
//        NativeSearchQueryBuilder builder1 = new NativeSearchQueryBuilder().withFilter(builder).withPageable(pageable).withSort(sortBuilder);/*** 使用QueryBuilder* termQuery("key", obj) 完全匹配(不进行分词匹配)* termsQuery("key", obj1, obj2..)   一次匹配多个值* matchQuery("key", Obj) 单个匹配(分词匹配), field不支持通配符, 前缀具高级特性* multiMatchQuery("text", "field1", "field2"..);  匹配多个字段, field有通配符忒行* matchAllQuery();         匹配所有文件* matchPhraseQuery() 类似于数据库里的“%名字57%”这种*///查询经纬度10000米范围内,name字段的值为名字57,并根据坐标排序
//        QueryBuilder queryBuilder = QueryBuilders.termQuery("name", "名字57");
//        NativeSearchQueryBuilder builder1 = new NativeSearchQueryBuilder().withQuery(queryBuilder).withFilter(builder).withPageable(pageable).withSort(sortBuilder);
//        NativeSearchQueryBuilder builder1 = new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("name", "名字57")).withFilter(builder).withPageable(pageable).withSort(sortBuilder);/*** 组合查询* must(QueryBuilders) :   AND* mustNot(QueryBuilders): NOT* should:                  : OR*/QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("carDriver", "李四")).should(QueryBuilders.matchQuery("addressPointDto.name", "李四"));
//        QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("remark", "祖国"));
//        QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "名字57")).mustNot(QueryBuilders.matchQuery("id", "43")).should(QueryBuilders.matchQuery("type", "类型36"));NativeSearchQueryBuilder builder1 = new NativeSearchQueryBuilder().withQuery(queryBuilder).withFilter(builder).withPageable(PageRequest.of(0,50)).withSort(sortBuilder);SearchQuery searchQuery = builder1.build();//queryForList默认是分页,走的是queryForPage,默认10个List<VehicleDto> VehiclePointEsDtoList = elasticsearchTemplate.queryForList(searchQuery, VehicleDto.class);System.out.println("耗时:" + (System.currentTimeMillis() - nowTime));return VehiclePointEsDtoList;}@Overridepublic List<VehicleDto> queryDto() {NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("carDriver", "张三1"));SearchQuery searchQuery = builder.build();//queryForList默认是分页,走的是queryForPage,默认10个List<VehicleDto> VehiclePointEsDtoList = elasticsearchTemplate.queryForList(searchQuery, VehicleDto.class);return VehiclePointEsDtoList;}}

elasticsearchTest 测试类

package com.es;import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.test.context.junit4.SpringRunner;import com.es.api.VehicleService;
import com.es.api.VehicleTemplateService;
import com.es.dto.AddressPointDto;
import com.es.dto.VehicleDto;@RunWith(SpringRunner.class)
@SpringBootTest(classes = ElasticSearchApplication.class)
public class elasticsearchTest {@Autowiredprivate VehicleService vehicleService;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;@Autowiredprivate VehicleTemplateService vehicleTemplateService;@Testpublic void queryGeos(){double lat = 39.929986;double lon = 116.395645;List<VehicleDto> list = vehicleTemplateService.queryForList(lat, lon);System.out.println(list);}@Testpublic void bulkIndex(){List<VehicleDto> list = new ArrayList<>();double lat = 39.929986;double lon = 116.395645;List<AddressPointDto> addressPointDto = new ArrayList<>();for (int i = 1 ; i < 10; i++) {double max = 0.00001;double min = 0.000001;Random random = new Random();double s = random.nextDouble() % (max - min + 1) + max;DecimalFormat df = new DecimalFormat("######0.000000");// System.out.println(s);String lons = df.format(s + lon);String lats = df.format(s + lat);Double dlon = Double.valueOf(lons);Double dlat = Double.valueOf(lats);AddressPointDto person = new AddressPointDto();person.setId(Long.valueOf(i));person.setName("李四" + i);person.setType("类型" + i);person.setXjTime(new Date());if(i%2 == 0) {person.setRemark("我爱中国,我爱祖国"+i);}if(i%3 == 0) {person.setRemark("我不爱美国,我爱祖国"+i);}else{person.setRemark("我不爱日本,我爱祖国"+i);}person.setAddress(new GeoPoint(dlat,dlon));addressPointDto.add(person);}for (int j = 0; j < 10; j++) {VehicleDto vehicleDto = new VehicleDto();vehicleDto.setId(Long.valueOf(j));vehicleDto.setCarDriver("李四"+j);vehicleDto.setCarName(j+".2米");vehicleDto.setCarType(j+"");vehicleDto.setPrice(j*1000);vehicleDto.setStatus("1");vehicleDto.setAddressPointDto(addressPointDto);list.add(vehicleDto);}System.out.println("list:"+list);vehicleTemplateService.bulkIndex(list);}@Testpublic void queryDto(){
//       Pageable pageable = new PageRequest(0, 5);
//       NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchQuery("carDriver", "张三1"));NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchQuery("addressPointDto.name", "张三1")).withPageable(PageRequest.of(0,5));SearchQuery searchQuery = builder.build();//queryForList默认是分页,走的是queryForPage,默认10个List<VehicleDto> vehicleDto = elasticsearchTemplate.queryForList(searchQuery, VehicleDto.class);System.err.println("findAll:"+vehicleDto);}@Testpublic void findByAddressPointDtoName(){String name = "张三1";List<VehicleDto> list = vehicleService.findByAddressPointDtoName(name,PageRequest.of(0,5));System.err.println("findAll:"+list);}@Testpublic void findByCarDriverAndPrice(){String carDriver = "张三1";int price = 1000;
//      Pageable pageable = new PageRequest(0, 5);List<VehicleDto> list = vehicleService.findByCarDriverAndPrice(carDriver, price, PageRequest.of(0,5));System.err.println("findAll:"+list);}@Testpublic void findAll(){List<VehicleDto> list = vehicleService.findAll();System.err.println("findAll:"+list);}@Testpublic void del(){Long id = 18L;vehicleService.del(id);}/*** 创建Index*/@Testpublic void createIndex(){List<VehicleDto> list = new ArrayList<>();double lat = 39.929986;double lon = 116.395645;List<AddressPointDto> addressPointDto = new ArrayList<>();for (int i = 1 ; i < 10; i++) {double max = 0.00001;double min = 0.000001;Random random = new Random();double s = random.nextDouble() % (max - min + 1) + max;DecimalFormat df = new DecimalFormat("######0.000000");// System.out.println(s);String lons = df.format(s + lon);String lats = df.format(s + lat);Double dlon = Double.valueOf(lons);Double dlat = Double.valueOf(lats);AddressPointDto person = new AddressPointDto();person.setId(Long.valueOf(i));person.setName("张三" + i);person.setType("类型" + i);person.setXjTime(new Date());if(i%2 == 0) {person.setRemark("我爱中国,我爱祖国"+i);}if(i%3 == 0) {person.setRemark("我不爱美国,我爱祖国"+i);}else{person.setRemark("我不爱日本,我爱祖国"+i);}person.setAddress(new GeoPoint(dlat,dlon));addressPointDto.add(person);}for (int j = 30; j < 40; j++) {VehicleDto vehicleDto = new VehicleDto();vehicleDto.setId(Long.valueOf(j));vehicleDto.setCarDriver("赵六"+j);vehicleDto.setCarName(j+".2米");vehicleDto.setCarType(j+"");vehicleDto.setPrice(j*1000);vehicleDto.setStatus("1");vehicleDto.setAddressPointDto(addressPointDto);list.add(vehicleDto);}//      vehicleService.set(vehicleDto);System.out.println("list:"+list);//如果需要使用到geo必须用ElasticsearchTemplate的方式添加vehicleService.setAll(list);}
}

github地址:https://github.com/LX1309244704/SpringBoot-master/tree/master/springboot-es

SpringBoot2.x项目模块整合之elasticSearch 6.x(geo使用等)相关推荐

  1. springboot整合es_[ElasticSearch从入门到场景实战]spring boot集成SpringData操作es

    人生起起伏伏,有风光无限日,也有落魄失魂时,人在低谷时,唯有"熬过去,才会赢" 前言 Elasticsearch的Spring Data是Spring Data项目的一部分,Spr ...

  2. IntelliJ idea中集成多个git项目模块

    需求 工程原先使用的是SVN作为代码管理工具,各模块统一设置在一起,进行代码整理和代码权限管理时不太方便,后面从SVN中迁移到GIT上,把系统的各个模块分别在GIT中单独管理,每个模块均包含一个代码仓 ...

  3. 使用Vite创建Vue3+TS项目并整合Element Plus框架等一条龙服务

    记录一下使用Vite创建Vue3+TS项目以及整合Element Plus框架,还有Less.Pinia.Vue-router.monaco-editor等插件或组件. 一.使用Vite创建Vue3+ ...

  4. IDEA创建一个springboot项目(三)整合swagge接口测试框架

    我是在上一篇的demo基础上增加的,上一篇地址:springboot项目(二)整合TKMytis框架 一:认识Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RE ...

  5. SpringBoot 2.7.2 分模块整合 activiti 7.1.0.M6

    SpringBoot 2.7.2 分模块整合 activiti 7.1.0.M6 项目背景 项目架构 process-dao process-service process 版本一览 process- ...

  6. 微服务项目的整合与测试

    实验目的 掌握微服务项目的整合使用 掌握Swagger-UI的简单使用 练习内容 1.微服务项目整合 1.1.项目预览 1.1.1.在 https://github.com/shi469391tou/ ...

  7. IntelliJ-将Java项目/模块转换为Maven项目/模块

    本文翻译自:IntelliJ - Convert a Java project/module into a Maven project/module I have a project on Bitbu ...

  8. 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路

    layout: post title: 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路 key: 20180517 tags: OAA flow chart se ...

  9. 广东省第三届职业技能大赛网络安全项目模块B

    广东省第三届职业技能大赛网络安全项目 模块 B 网络安全事件响应.数字取证调查和应用程序安全 目录 目录  1 模块  B 竞赛项目样题  2 介绍  2 所需的设备和材料  2 评分方案  2 项目 ...

最新文章

  1. 软件测试技术篇:UI自动化到底是难是易?
  2. 图像处理学习三(频域图像增强)
  3. Eclipse中各种文件【默认编码格式设置】,防止乱码等问题
  4. securecrt鼠标右键的配置
  5. 剑指offer之判断二叉树是不是平衡二叉树
  6. 如何把数据库从sql变成mysql_如何将数据库从SQL Server迁移到MySQL
  7. iPhone6plus 的 iOS 11 GM和正式版安装包的 md5一模一样
  8. server-sent events
  9. uniapp——获取退出登录
  10. 黑莓手机无法上网解决方案
  11. Python_爬虫系列_10.各种案例集合
  12. error while loading shared libraries解决办法
  13. Olivetti PR2/PR2E 打印机参数设置
  14. 测试是ufs3.0的软件,可怕!UFS 3.0测试首曝光:速度竟是UFS 2.1的3倍
  15. 神仙程序媛小姐姐的23个Java设计模式 ,全站式保姆的Java教程导航帖(已完结)
  16. 租车APP哪家强?这三款软件可能是你的手机必备
  17. 2021-2025年中国SWIR-InGaAs光电二极管线阵行业市场供需与战略研究报告
  18. 在三星smart TV上开发widget-入门篇
  19. 一步一步学Spring Boot(三)-黄文毅-专题视频课程
  20. H3CS10510报Invalid MAC address处理

热门文章

  1. 基于c#的游戏编程语言,基于C#语法的Unity3d技术,设计和开发一个格斗游戏实战...
  2. Java后端新人入职第一天,环境搭建,全看这篇就行了
  3. 计算机专业考研英语二国家线多少分,考研分数线怎么看,计算机专业的,国家线是什么 单科?...
  4. 基于java的人事管理系统|人力请假考勤工资人事奖惩
  5. Spring自动装配@Autowired的三种方式
  6. 一个静态淘宝购物车网页练习
  7. Mac Dock 效果及原理(勾股定理)
  8. 比Excel还好用的web报表工具,果然国产最佳
  9. 【Java设计模式】007-简单工厂模式
  10. 关于下载cuda和cudnn官方网站访问不了的替代方案