SpringBoot 数据存储实战拆解!

Elasticsearch是一个基于Apache Lucene开发的的搜索服务,提供了一个分布式多用户能力的全文搜索引擎,并基于RESTful web接口。支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等功能。那么如何在SpringBoot项目中整合ElasticSearch来完成数据的存储呢?下面我们就来看看。

这里需要特别说明在高版本的ElasticSearch对于数据的处理方式与低版本的处理方式是不同的,并且,在Spring Boot中所支持的ElasticSearch客户端版本也是有所差异的。这里演示的是基于 Spring Boot 2.1.4.RELEASE 版本和ElasticSearch 6.8.0的版本处理方式。

依赖和配置

添加Elasticsearch的依赖到pom.xml文件中。

xml 复制代码
<parent>
    <artifactId>spring-boot-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.1.4.RELEASE</version>
</parent>

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

在配置文件文件中配置ElasticSearch的连接

ini 复制代码
spring.data.elasticsearch.cluster-name=my-cluster
spring.data.elasticsearch.cluster-nodes=192.168.1.202:9300

这里需要注意,在高版本的SpringBoot配置中已经不支持这样的配置操作,需要注意的实,在这个配置中如果是通过ELK调用则添加的端口是9200,如果是通过Java程序调用则配置的连接端口是9300。

具体实现

typescript 复制代码
@Document(indexName = "my_index", type = "my_type")
public class MyDocument {

    @Id
    private String id;
    private String name;
    private String description;

    // 省略构造函数、getter和setter
}

继承ElasticsearchRepository接口实现数据访问层代码

typescript 复制代码
public interface MyDocumentRepository 
extends ElasticsearchRepository<MyDocument, String> {
}

编写服务层代码

typescript 复制代码
@Service
public class MyDocumentService {

    @Autowired
    private MyDocumentRepository repository;

    public MyDocument save(MyDocument document) {
        return repository.save(document);
    }

    public Iterable<MyDocument> findAll() {
        Iterable<MyDocument> all = repository.findAll();
        return all;
    }

    public MyDocument findById(String id) {
        return repository.findById(id).orElse(null);
    }

    public void deleteById(String id) {
        repository.deleteById(id);
    }
}

编写Controller类进行测试

less 复制代码
@RestController
@RequestMapping("/documents")
public class MyDocumentController {

    @Autowired
    private MyDocumentService service;

    @PostMapping
    public MyDocument create(@RequestBody MyDocument document) {
        return service.save(document);
    }

    @GetMapping
    public Iterable<MyDocument> getAll() {
        Iterable<MyDocument> iterable = service.findAll();
        return iterable;
    }

    @GetMapping("/{id}")
    public MyDocument getById(@PathVariable String id) {
        return service.findById(id);
    }

    @DeleteMapping("/{id}")
    public void deleteById(@PathVariable String id) {
        service.deleteById(id);
    }
}

以上代码示例演示了如何使用Spring Boot整合Elasticsearch实现数据存储。

调用接口进行测试

获取列表

总结

在上面的例子中,通过SpringBoot 2.1.4与ElasticSearch6.8.0完成了整合,如果想要适配更高版本的ElasticSearch或者是Spring Boot ,在过程中一定注意对于版本兼容性的选择。

相关推荐
superman超哥1 天前
双端迭代器(DoubleEndedIterator):Rust双向遍历的优雅实现
开发语言·后端·rust·双端迭代器·rust双向遍历
1二山似1 天前
crmeb多商户启动swoole时报‘加密文件丢失’
后端·swoole
马卡巴卡1 天前
Java CompletableFuture 接口与原理详解
后端
神奇小汤圆1 天前
Java线程协作工具:CountDownLatch 、CyclicBarrier、Phaser、Semaphore 、Exchanger
后端
gelald1 天前
ReentrantLock 学习笔记
java·后端
计算机学姐1 天前
基于SpringBoot的校园资源共享系统【个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·mysql·spring·信息可视化
J_liaty1 天前
RabbitMQ面试题终极指南
开发语言·后端·面试·rabbitmq
BD_Marathon1 天前
SpringBoot程序快速启动
java·spring boot·后端
行百里er1 天前
代码跑得慢?让Spring的StopWatch告诉你真相!
java·后端·github
a程序小傲1 天前
得物Java面试被问:方法句柄(MethodHandle)与反射的性能对比和底层区别
java·开发语言·spring boot·后端·python·面试·职场和发展