springBoot集成ES,通过ES查询MYSQL数据

1,首先导入相关依赖

<dependencies>
    <!-- Spring Data Elasticsearch -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

  
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3.4</version>
    </dependency>
</dependencies>

2.配置数据源和Elasticsearch

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydatabase
    username: root
    password: yourpassword
    driver-class-name: com.mysql.cj.jdbc.Driver

  elasticsearch:
    uris: http://localhost:9200

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

 3. 创建实体类和存储库

实体类
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@TableName("users")
@Document(indexName = "users")
public class User {

    @TableId
    private Long id;
    private String name;
    private String email;

    // Getters and setters
}

 

MyBatis-Plus Mapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
}
Elasticsearch存储库
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface UserSearchRepository extends ElasticsearchRepository<User, Long> {
}

 

 4.同步服务

创建一个服务类,用于从MySQL读取数据并同步到Elasticsearch。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository; // 如果使用JPA
    // @Autowired
    // private UserMapper userMapper; // 如果使用MyBatis-Plus

    @Autowired
    private UserSearchRepository userSearchRepository;

    @PostConstruct
    public void indexUsers() {
        List<User> users = userRepository.findAll(); // JPA
        // List<User> users = userMapper.selectList(null); // MyBatis-Plus
        userSearchRepository.saveAll(users);
    }

    public List<User> searchByName(String name) {
        return userSearchRepository.findByName(name);
    }
}

5. 实时同步

为了实时同步数据,可以使用数据库触发器、消息队列、或者定时任务来监控MySQL中的数据变化,并同步到Elasticsearch。这部分实现可以根据具体需求和项目架构选择适合的方案。

使用定时任务
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class SyncScheduler {

    @Autowired
    private UserService userService;

    @Scheduled(fixedRate = 60000) // 每分钟执行一次
    public void sync() {
        userService.indexUsers();
    }
}

6. 创建控制器

创建一个控制器类,用于处理HTTP请求并返回搜索结果。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/search")
    public List<User> searchUsers(@RequestParam String name) {
        return userService.searchByName(name);
    }
}

总结

通过上述步骤,你可以实现MySQL数据同步到Elasticsearch的功能。初始化同步将现有数据批量导入Elasticsearch,实时同步则通过监控MySQL的数据变化并实时更新Elasticsearch中的数据。根据你的具体需求,可以选择合适的同步策略来保证数据的一致性和实时性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值