docker安装elasticsearch+springboot简单的操作

安装elasticsearch

docker pull elasticsearch:6.8.8

 启动:

docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:6.8.8

 安装 mobz/elasticsearch-head:5(类似navicat数据库客户端)

 docker pull mobz/elasticsearch-head:5

 docker run --name elasticsearch-head -d  -p 9100:9100 mobz/elasticsearch-head:5

这边要分别做两个操作

浏览器访问 ip:9100

 额外设置,不然连不上

ElasticSearch-head 操作时不修改配置,默认会报 406错误码

编辑vendor.js

 把文件复制出来 docker cp    容器id:/usr/src/app/_site/vendor.js   /usr/local/

修改

再复制进去  docker cp  /usr/local/vendor.js  容器id:/usr/src/app/_site

ElasticSearch.yml文件修改

修改docker中elasticsearch的elasticsearch.yml文件 

进入容器  docker exec -it  容器id   /bin/bash

vi  elasticsearch.yml

在下面添加两行

http.cors.enabled: true

http.cors.allow-origin: "*"

退出容器 exit

容器上面两个容器

代码篇

pom:

版本要根据官网上的要求要统一一下,不然一会会报错

我这边用的springboot2.2.6对应的spring-data-elasticsearch是3.2.6

 正好对应上我之前安装的6.8.8的版本

依赖包

引入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

 properties文件配置

spring.data.elasticsearch.clusterName=es
spring.data.elasticsearch.cluster-nodes=172.23.189.69:9300

9300对应tcp协议端口  9200对应的http协议端口

后面都是代码。我就贴出来吧

service层

package com.sharding.jdbc.es.service.impl;

import cn.hutool.core.collection.IterUtil;
import com.google.common.collect.Lists;
import com.sharding.jdbc.es.dto.CommodityPageQuery;
import com.sharding.jdbc.es.entity.Commodity;
import com.sharding.jdbc.es.mapper.CommodityRepository;
import com.sharding.jdbc.es.service.CommodityService;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.search.MultiMatchQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @version 1.0
 * @description: class
 * @author: zhangguoliang
 * @date: 2021/12/22 15:47
 */
@Service
public class CommodityServiceImpl implements CommodityService {
    @Autowired
    private CommodityRepository commodityRepository;

    /**
     * 新增
     * @param commodity
     */
    @Override
    public void save(Commodity commodity) {
        commodityRepository.save(commodity);
    }

    /**
     * 查询所有
     * @return
     */
    @Override
    public List<Commodity> getListCommodities() {
        Iterable<Commodity> all = commodityRepository.findAll();
        List<Commodity> commodities = Lists.newArrayList(all);
        return commodities;
    }

    /**
     * 条件删除
     * @param commodity
     */
    @Override
    public void delete(Commodity commodity) {
        commodityRepository.delete(commodity);
    }

    /**
     * 条件查询
     * @param name
     * @return
     */
    @Override
    public List<Commodity> getCommoditiesByName(String name) {
        List<Commodity> commodityList = new ArrayList<>();
//        MatchQueryBuilder queryBuilder = new MatchQueryBuilder("name", name);
        SearchQuery searchQuery=  new NativeSearchQueryBuilder().withQuery(QueryBuilders.commonTermsQuery("name",name)).build();
        Iterable<Commodity> search = commodityRepository.search(searchQuery);
        search.forEach(e -> commodityList.add(e));
        return commodityList;
    }

    /**
     * 分页查询
     * @param commodityQuery
     * @return
     */
    @Override
    public Page<Commodity> pageQuery(CommodityPageQuery commodityQuery) {
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        if(null!=commodityQuery.getName()){
            boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("name",commodityQuery.getName()));
        }
        if(null!=commodityQuery.getBrand()){
            boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("brand",commodityQuery.getBrand()));
        }
        SearchQuery searchQuery=new NativeSearchQueryBuilder().
                withQuery(boolQueryBuilder).
                        withPageable(PageRequest.of(commodityQuery.getPage()-1,commodityQuery.getSize())).build();
        Page<Commodity> search = commodityRepository.search(searchQuery);
        return search;
    }
}
Dao层

@Repository
public interface CommodityRepository extends ElasticsearchRepository<Commodity,String> {
}
写个测试类就完事了

@Autowired
private CommodityService commodityService;
@Test
public void save(){
    Commodity commodity = new Commodity();
    commodity.setSkuId("6R_y5X0BpkAYTaTK6LFW");
    commodity.setName("原味切片面包(10片装)");
    commodity.setCategory("101");
    commodity.setPrice(880);
    commodity.setBrand("良品铺子");
    commodityService.save(commodity);

    commodity = new Commodity();
    commodity.setSkuId("1501009002");
    commodity.setName("原味切片面包(6片装)");
    commodity.setCategory("101");
    commodity.setPrice(680);
    commodity.setBrand("良品铺子");
    commodityService.save(commodity);

    commodity = new Commodity();
    commodity.setSkuId("1501009004");
    commodity.setName("元气吐司850g");
    commodity.setCategory("101");
    commodity.setPrice(120);
    commodity.setBrand("百草味");
    commodityService.save(commodity);
}
@Test
public void  getGoodByName(){
    List<Commodity> commoditiesByName = commodityService.getCommoditiesByName("原味切片面包");
    for (Commodity commodity:commoditiesByName){
        System.out.println(commodity);
    }
}
@Test
public void delete(){
    Commodity commodity = new Commodity();
    commodity.setSkuId("6R_y5X0BpkAYTaTK6LFW");

    commodityService.delete(commodity);
}

@Test
public void pageQuery(){
    CommodityPageQuery commodityPageQuery = new CommodityPageQuery();
    commodityPageQuery.setPage(1);
    commodityPageQuery.setSize(10);
    Page<Commodity> commodities = commodityService.pageQuery(commodityPageQuery);
    System.out.println(JSONObject.toJSONString(commodities));
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当然可以,以下是详细的步骤: 1. 安装dockerdocker-compose 在CentOS上安装DockerDocker Compose,可以使用以下命令: ``` sudo yum update -y sudo yum install -y docker sudo systemctl start docker sudo systemctl enable docker sudo systemctl status docker ``` Docker Compose是Docker的一个插件,需要单独安装: ``` sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version ``` 2. 创建工作目录 在你选择的目录里创建一个名为`elk`的目录,并进入该目录。 ``` mkdir elk && cd elk ``` 在该目录中新建以下文件夹 ``` mkdir -p logs/elasticsearch config/elasticsearch logs/kibana logs/logstash plugin ``` 3. 创建elasticsearch docker compose 在`elk`目录下,创建一个名为`docker-compose.yml`的文件,并加入以下内容: ```yml version: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0 container_name: elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" volumes: - ./logs/elasticsearch:/usr/share/elasticsearch/logs - ./config/elasticsearch:/usr/share/elasticsearch/config ports: - 9200:9200 - 9300:9300 networks: - elk networks: elk: ``` 说明: - `elasticsearch`是容器名称,可以根据实际情况调整 - `discovery.type=single-node`表示只有一个节点 - `xpack.security.enabled=false`表示不启用安全模式 - `ES_JAVA_OPTS=-Xms512m -Xmx512m`表示分配512MB内存给Elasticsearch容器 - `./logs/elasticsearch:/usr/share/elasticsearch/logs`表示将本地的`logs/elasticsearch`目录映射到Elasticsearch容器内的`/usr/share/elasticsearch/logs`目录 - `./config/elasticsearch:/usr/share/elasticsearch/config`表示将本地的`config/elasticsearch`目录映射到Elasticsearch容器内的`/usr/share/elasticsearch/config`目录 - `9200:9200`和`9300:9300`表示将容器内的9200和9300端口映射到宿主机上,方便通过浏览器访问 4. 创建kibana docker compose 在`elk`目录下,继续编辑`docker-compose.yml`,添加以下内容: ```yml version: '3' services: elasticsearch: ... networks: - elk kibana: image: docker.elastic.co/kibana/kibana:7.14.0 container_name: kibana environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 volumes: - ./logs/kibana:/usr/share/kibana/logs ports: - 5601:5601 depends_on: - elasticsearch networks: - elk networks: elk: ``` 说明: - `kibana`服务依赖于`elasticsearch`服务,必须要先启动`elasticsearch` - `ELASTICSEARCH_HOSTS=http://elasticsearch:9200`表示连接到Elasticsearch容器的9200端口 - `5601:5601`表示将容器内的5601端口映射到宿主机上,方便通过浏览器访问 5. 创建logstash docker compose 在`elk`目录下,继续编辑`docker-compose.yml`,添加以下内容: ```yml version: '3' services: elasticsearch: ... networks: - elk kibana: ... networks: - elk logstash: image: docker.elastic.co/logstash/logstash:7.14.0 container_name: logstash volumes: - ./plugin:/usr/share/logstash/plugins command: logstash -f /usr/share/logstash/pipeline/logstash.conf ports: - 5044:5044 - 5000:5000 depends_on: - elasticsearch networks: - elk networks: elk: ``` 说明: - `logstash`服务依赖于`elasticsearch`服务,必须要先启动`elasticsearch` - `./plugin:/usr/share/logstash/plugins`表示将本地的`plugin`目录映射到Logstash容器内的`/usr/share/logstash/plugins`目录 - `command: logstash -f /usr/share/logstash/pipeline/logstash.conf`表示运行`/usr/share/logstash/pipeline/logstash.conf`文件中的配置 - `5044:5044`和`5000:5000`表示将容器内的5044和5000端口映射到宿主机上,方便和应用程序交互 6. 配置logstash 在`elk`目录下,创建`logstash/pipeline`目录,并在其中新建名为`logstash.conf`的文件,并加入以下内容: ```conf input { tcp{ port => 5000 type => "spring-boot" } udp { port => 5000 type => "spring-boot" } } filter { if [type] == "spring-boot" { grok { match => { "message" => "%{TIMESTAMP_ISO8601:logtime} %{LOGLEVEL:loglevel} --- \[%{DATA:thread}\] %{DATA:class}.%{DATA:method} : %{GREEDYDATA:message}" } } } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "spring-boot-%{+YYYY.MM.dd}" } } ``` 说明: - `input`表示输入流设置,这里使用了TCP或UDP协议,监听5000端口 - `filter`表示过滤流设置,grok插件用来解析正则表达式。这里用正则表达式解析Spring Boot应用程序产生的日志文件 - `output`表示输出流设置,将过滤后的日志数据输出到Elasticsearch中 7. 使用Docker Compose启动服务 在`elk`目录下,运行以下命令启动服务: ``` docker-compose up -d ``` 等待一些时间后,整个`ELK`服务就启动了。 8. 测试 启动所有容器后,让Spring Boot应用程序将日志发送到端口5000 打开浏览器,输入`http://你的ip:5601/app/discover`访问Kibana应用程序。在Kibana应用程序中,创建索引,并在Discover页面中查看项目的日志信息。 现在,您已经成功地使用Docker Compose在CentOS上搭建了一个Spring Boot整合的ELK。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大梁子程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值