前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot与Elasticsearch完美结合

Springboot与Elasticsearch完美结合

作者头像
码农小胖哥
发布2019-12-10 16:09:35
1.3K0
发布2019-12-10 16:09:35
举报

前言

在前面一篇已经写了elasticsearch的环境的搭建,那么这一篇就写下springboot与elasticsearch环境的整合。如果没有搭建环境,请参考:Spring Boot整合Elasticsearch

项目生成

1 像之前一样,访问 start.spring.io,选择对应组件完成,如下图

  • 2 生成项目后导入idea
代码编写
  • 需求描述:我们利用es做一个简单的用户添加获取的功能。

1、编写用户类

代码语言:javascript
复制
@Document(indexName = "user", type = "student")
  public class UserInfo implements Serializable{
      private String id;
      private String username;
      private int age;

      public String getId() {
          return id;
      }

      public void setId(String id) {
          this.id = id;
      }

      public String getUsername() {
          return username;
      }

      public void setUsername(String username) {
          this.username = username;
      }

      public int getAge() {
          return age;
      }

      public void setAge(int age) {
          this.age = age;
      }

      @Override
      public String toString() {
          return "UserInfo{" +
                  "id='" + id + '\'' +
                  ", username='" + username + '\'' +
                  ", age=" + age +
                  '}';
      }
  }
  • 此处id属性必须有,或者改为别的如userId属性,必须添加@Id注解,并且必须为String类型,这是因为后面UserRepository需要泛型为第一个参数为bean的类型,第二个参数为id
  • Spring-data-elasticsearch为我们提供了@Document、@Field等注解,如果某个实体需要建立索引,只需要加上这些注解即可

这是一个简单的用户类,并且生成了getter,setter方法。

2、dao的编写这里我们采用jpa的方式整合es,使用接口,继承ElasticsearchRepository,如下

代码语言:javascript
复制
@Repository
  public interface UserRepository extends ElasticsearchRepository<UserInfo,String> {
  }
  ```

- service的编写

  ```
  @Service
  public class Uservice {
      @Autowired
      UserRepository userRepository;
      public UserInfo getById(String id){
          return userRepository.findOne(id);
      }

      public void save(UserInfo userInfo){
          userRepository.save(userInfo);
      }

  }
  • controller的编写 这里直接使用rest风格的接口
代码语言:javascript
复制
@RestController
  public class UserController {
      Logger logger = LoggerFactory.getLogger(this.getClass());
      @Autowired
      UserInfoService userInfoService;
      @GetMapping("/user/{id}")
      public UserInfo get(@PathVariable String id){
          UserInfo userInfo = userInfoService.getById(id);
          logger.info("---${user}:{}",userInfo.toString());
          return userInfo;
      }

      @PostMapping("/user/create/{id}")
      public UserInfo create(@PathVariable String id,@RequestBody UserInfo userInfo){
          userInfo.setId(id);
          userInfoService.save(userInfo);
          return userInfo;
      }
  }

这里只简单的编写了一个添加和一个获取的方法,接下来我们运行项目 抛出了一个异常,如下

代码语言:javascript
复制
java.lang.ClassNotFoundException: com.sun.jna.Native
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_111]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_111]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_111]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_111]
    at java.lang.Class.forName0(Native Method) ~[na:1.8.0_111]
    at java.lang.Class.forName(Class.java:264) ~[na:1.8.0_111]

这是是jna包的原因,我们将此jar添加到pom.xml

代码语言:javascript
复制
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>4.4.0</version>
</dependency>
  • 测试 我们先利用postman做一个接口测试,如下图

测试成功,已经将数据添加到es中。

  • 获取

至此,es的添加和获取已经完成,后期es的更深入的东西后期请持续关注。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 项目生成
      • 代码编写
      相关产品与服务
      Elasticsearch Service
      腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档