首页 > 数据库 >Spring Boot 集成 MyBatis、Redis、RabbitMQ 和 Elasticsearch 教程

Spring Boot 集成 MyBatis、Redis、RabbitMQ 和 Elasticsearch 教程

时间:2024-05-30 18:44:07浏览次数:21  
标签:Spring Redis springframework example RabbitMQ import org com public

1. 环境准备

确保你的开发环境已经安装了以下软件:

  • Java Development Kit (JDK) 1.8 或更高版本
  • Apache Maven 或 Gradle 作为构建工具
  • 一个文本编辑器或IDE(如IntelliJ IDEA或Eclipse)
  • Redis、RabbitMQ 和 Elasticsearch 服务器

2. 创建项目

使用 Spring Initializr 创建一个新项目,并添加以下依赖:

  • Spring Web
  • MyBatis-Spring-Boot-Starter
  • Spring Boot Redis Starter
  • Spring Boot RabbitMQ Starter
  • Spring Data Elasticsearch

3. 配置数据库

application.properties​ 文件中配置数据库连接信息:

spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.use-generated-keys=true
mybatis.configuration.default-statement-timeout=30

4. 配置 MyBatis

创建 mybatis-config.xml​ 文件在 src/main/resources​ 目录下,并配置 MyBatis 相关设置。

5. 配置 Redis

application.properties​ 文件中添加 Redis 配置:

spring.redis.host=localhost
spring.redis.port=6379

6. 配置 RabbitMQ

application.properties​ 文件中添加 RabbitMQ 配置:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

7. 配置 Elasticsearch

application.properties​ 文件中添加 Elasticsearch 配置:

spring.elasticsearch.rest.uris=http://localhost:9200

8. 实体类定义

定义一个简单的用户实体 User.java​:

package com.example.demo.entity;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "user")
public class User {
    @Id
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}

9. MyBatis Mapper 接口

创建一个 MyBatis Mapper 接口 UserMapper.java​:

package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user")
    List<User> findAll();
}

10. Redis 配置

创建一个配置类 RedisConfig.java​ 来配置 Redis 序列化:

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

11. RabbitMQ 配置

创建一个配置类 RabbitMQConfig.java​ 来配置 RabbitMQ 交换机和队列:

package com.example.demo.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    @Bean
    public Queue userQueue() {
        return new Queue("userQueue");
    }

    @Bean
    public DirectExchange userExchange() {
        return new DirectExchange("userExchange");
    }

    @Bean
    public Binding userBinding(Queue userQueue, DirectExchange userExchange) {
        return BindingBuilder.bind(userQueue).to(userExchange).with("userRoutingKey");
    }
}

12. Elasticsearch 配置

创建一个 Elasticsearch 配置类 ElasticsearchConfig.java​:

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.ElasticsearchRestClient;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;

@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {

    @Override
    @Bean
    public ClientConfiguration clientConfiguration() {
        return ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .build();
    }

    @Override
    @Bean
    public ElasticsearchRestClient elasticsearchClient(ClientConfiguration clientConfiguration) {
        return new ElasticsearchRestClientBuilder(clientConfiguration).build();
    }

    @Override
    @Bean
    public ElasticsearchOperations elasticsearchTemplate() {
        return new ElasticsearchRestTemplate(elasticsearchClient(clientConfiguration()));
    }
}

13. 业务逻辑实现

创建业务服务 UserService.java​ 来集成 MyBatis、Redis、RabbitMQ 和 Elasticsearch:

package com.example.demo.service;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Autowired
    private ElasticsearchOperations elasticsearchOperations;

    public List<User> findAll() {
        // 从 Redis 获取
        List<User> users = (List<User>) redisTemplate.opsForList().range("users", 0, -1);
        if (users == null || users.isEmpty()) {
            // 从数据库获取
            users = userMapper.findAll();
            // 存储到 Redis
            redisTemplate.opsForList().rightPushAll("users", users);
        }
        return users;
    }

    public void create(User user) {
        // 存储到数据库
        userMapper.insert(user);
        // 发送消息到 RabbitMQ
        rabbitTemplate.convertAndSend("userExchange", "userRoutingKey", user);
        // 索引到 Elasticsearch
        elasticsearchOperations.save(user);
    }
}

14. 控制器

创建一个控制器 UserController.java​ 来处理 HTTP 请求:

package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping
    public List<User> listAll() {
        return userService.findAll();
    }

    @PostMapping
    public void create(@RequestBody User user) {
        userService.create(user);
    }
}

15. 启动类

DemoApplication.java​ 是Spring Boot的启动类:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

16. 运行和测试

  • 运行 DemoApplication.java​ 类启动应用。
  • 使用Postman或任何HTTP客户端测试API。

17. 打包和部署

  • 使用Maven或Gradle命令打包应用。
  • 将打包好的JAR文件部署到服务器。

18. 进阶

  • 考虑使用Spring Security进行用户认证和授权。
  • 优化RabbitMQ的消息处理逻辑,确保消息的可靠传递。
  • 使用Elasticsearch进行全文搜索功能的实现。

这个教程提供了一个集成了MyBatis、Redis、RabbitMQ和Elasticsearch的Spring Boot应用的基础框架。你可以在此基础上扩展更多功能和特性。

标签:Spring,Redis,springframework,example,RabbitMQ,import,org,com,public
From: https://www.cnblogs.com/shenhuanjie/p/18223024/spring-boot-integrates-mybatis-redis-rabbit

相关文章

  • redis命令大全
    通用命令命名说明例子keys查看指定指定通配符的keykeyskeyskey1dbsize返回整个数据库中key的数量exists判断指定key是否存在existskey1del删除指定key,返回删除的个数delkey1expire设置在多长时间以后过期(秒)expirek110expireat设置在......
  • SpringBoot直连SAP,IJ IDEA开发与Windows,linux部署
    一、sapjco引入1.1、sapjco介绍sapjco3.jar,连接SAP所需的jar包,linux与windows系统通用libsapjco3.so,linux系统下连接sap所需的动态链接库sapjeco3.dll,windows系统下连接sap所需的动态链接库我使用的版本为sapjco3.0.10<dependency><groupId>com.sap</groupId> <artif......
  • 将 Spring data JPA jars 升级到 v3.3.0 后出现 java.lang.NoSuchMethodError 错误
    在我将springdatajpa和commonsjar升级到我们产品的3.3.0版本后,我遇到了这个错误。Causedby:java.lang.NoSuchMethodError:'voidcom.org.application.server.services.workorder.database.dao.UpdateWorkOrder._persistence_checkFetchedForSet(java.lang.String)'......
  • SpringBoot项目接入分布式任务调度平台xxl-job(2.0.2)说明
    简介如果是单体项目,定时任务写到项目中就能满足需要,当需要部署集群的时候就会出现问题,接入统一的任务调试平台是一个不错的选择。接入xxl-job挺简单的,只需要几步,好记性不如烂笔头,记录一下步骤,方便以后使用。 本次使用软件的相关版本:xxl-job版本:2.0.2spring-boot:2.3.6.RELEAS......
  • MITIT 2024 Spring Invitational Qualification 简要题解
    这个比赛没有找到题解,有点难绷,所以来写篇。(实际上是无聊时写的就是了)题面:https://codeforces.com/gym/105125/。目测难度是绿绿黄紫紫。A有点诈骗。其实策略是只保留\(\le3\)个数,然后就随便维护一下。\(O(n\logn)\)。Code#include<bits/stdc++.h>usingnamespaces......
  • springboot基于Java的超市进销存系统vue(源码+lw+部署文档+讲解等)
    前言......
  • 基于springboot家政服务管理平台vue(源码+lw+部署文档+讲解等)
    前言......
  • Spring Bean实例化:从源码窥探生命之源
    1.引言在Spring框架中,Bean的生命周期是一个至关重要的概念,它涉及了Bean的创建、初始化、使用以及销毁等多个阶段。其中,Bean的实例化作为生命周期的起点,具有举足轻重的地位。以下将对Spring中Bean的实例化过程进行深度解析,结合源码分析,提供更深入的理解。2.Bean实例化的......
  • 【源码】Spring Data JPA原理解析之Repository自定义方法命名规则执行原理(一)
     SpringDataJPA系列1、SpringBoot集成JPA及基本使用2、SpringDataJPACriteria查询、部分字段查询3、SpringDataJPA数据批量插入、批量更新真的用对了吗4、SpringDataJPA的一对一、LazyInitializationException异常、一对多、多对多操作5、SpringDataJPA自定......
  • SpringBoot整合Mybatis实现增删改查功能
    目录1.添加依赖2.配置数据源和MyBatis3.创建实体类4.Mapper接口与映射文件5.编写服务层6.控制器SpringBoot整合MyBatis是一个相对直接的过程,主要涉及添加依赖、配置数据源、配置MyBatis、创建实体类、Mapper接口和映射文件、以及编写服务层来实现增删改......