【Redis7】Spring Boot集成Redis(重点:集成RedisTemplate)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 本文重点介绍Redis7 Spring Boot集成Redis,包括Jedis、lettuce、集成RedisTemplate、集群时一台master宕机,java报错的情况分析。

【大家好,我是爱干饭的猿,本文重点介绍Redis7 Spring Boot集成Redis,包括Jedis、lettuce、集成RedisTemplate、集群时一台master宕机,java报错的情况分析。

后续会继续分享Redis7和其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】

上一篇文章:《【Redis7】Redis7 集群(重点:哈希槽分区)》


目录

🍖1. redis 配置文件

🍖2.Jedis

2.1 介绍

2.2 操作使用

🍖3. lettuce

3.1 介绍

3.2 Jedis和Lettuce的区别

3.3 操作使用

🍖4. 集成RedisTemplate - 推荐使用

4.1 连接单机

1. 操作使用

2. 测试

4.2 连接集群

1.正常启动

2. 测试

3. 一台master宕机,java报错


🍖1. redis 配置文件

    • redis.conf配置文件,改完后确保生效,记得重启,记得重启
      • 默认daemonize no 改为 daemonize yes
      • 默认protected-mode yes 改为 protected-mode no
      • 默认bind 127.0.0.1 改为 直接注释掉(默认bind 127.0.0.1只能本机访问)或改成本机IP地址,否则影响远程IP连接
      • 添加redis密码 改为 requirepass 你自己设置的密码

        🍖2.Jedis

        2.1 介绍

        Jedis Client 是Redis 官网推荐的一个面向 Java 客户端,库文件实现了对各类API进行封装调用。

        2.2 操作使用

          • 新建项目
          • pom.xm
          <!--jedis-->
              <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>4.3.1</version>
              </dependency>

          image.gif

            • yml文件
            server.port=7777
            spring.application.name=redis7_study

            image.gif

              • 业务类
              package com.haomin.redis7_study.jedis_lettuce;
              import lombok.extern.slf4j.Slf4j;
              import redis.clients.jedis.Jedis;
              import java.util.*;
              /**
               * @author haomin
               * @date 2023/04/22 11:32
               **/
              @Slf4j
              public class JedisDemo {
                  public static void main(String[] args) {
                      Jedis jedis = new Jedis("**.***.***.***", 6379);
                      jedis.auth("***");
                      log.info("redis conn status:{}", "连接成功");
                      log.info("redis ping retvalue:{}", jedis.ping());
                      jedis.set("k1","v1");
                      jedis.set("k2","v2");
                      jedis.set("k3","v3");
                      Set<String> keys = jedis.keys("*");
                      for (String key : keys) {
                          System.out.println(key);
                      }
                      // String
                      jedis.mset("m1", "v1","m2","v2","m3","v3");
                      System.out.println(jedis.mget("m1", "m2","m3"));
                      // list
                      jedis.lpush("myList","v1","v2","v3","v4","v5");
                      System.out.println(jedis.lrange("myList", 0, -1));
                      // set
                      jedis.sadd("orders","111");
                      jedis.sadd("orders","222");
                      jedis.sadd("orders","333");
                      Set<String> set1 = jedis.smembers("orders");
                      for(Iterator iterator = set1.iterator(); iterator.hasNext();) {
                          String string = (String) iterator.next();
                          System.out.println(string);
                      }
                      jedis.srem("orders","222");
                      System.out.println(jedis.smembers("orders").size());
                      //hash
                      jedis.hset("hash1","userName","lisi");
                      System.out.println(jedis.hget("hash1","userName"));
                      Map<String,String> map = new HashMap<String,String>();
                      map.put("telphone","138xxxxxxxx");
                      map.put("address","atguigu");
                      map.put("email","zzyybs@126.com");//课后有问题请给我发邮件
                      jedis.hmset("hash2",map);
                      List<String> result = jedis.hmget("hash2", "telphone","email");
                      for (String element : result) {
                          System.out.println(element);
                      }
                      //zset
                      jedis.zadd("zset01",60d,"v1");
                      jedis.zadd("zset01",70d,"v2");
                      jedis.zadd("zset01",80d,"v3");
                      jedis.zadd("zset01",90d,"v4");
                      List<String> zset01 = jedis.zrange("zset01", 0, -1);
                      zset01.forEach(System.out::println);
                  }
              }

              image.gif

              🍖3. lettuce

              3.1 介绍

              Lettuce是一个Redis的Java驱动包,Lettuce翻译为生菜

              3.2 Jedis和Lettuce的区别

                     jedis和Lettuce都是Redis的客户端,它们都可以连接Redis服务器,但是在SpringBoot2.0之后默认都是使用的Lettuce这个客户端连接Redis服务器。因为当使用Jedis客户端连接Redis服务器的时候,每个线程都要拿自己创建的Jedis实例去连接Redis客户端,当有很多个线程的时候,不仅开销大需要反复的创建关闭一个Jedis连接,而且也是线程不安全的,一个线程通过Jedis实例更改Redis服务器中的数据之后会影响另一个线程。

                     但是如果使用Lettuce这个客户端连接Redis服务器的时候,就不会出现上面的情况,Lettuce底层使用的是Netty,当有多个线程都需要连接Redis服务器的时候,可以保证只创建一个Lettuce连接,使所有的线程共享这一个Lettuce连接,这样可以减少创建关闭一个Lettuce连接时候的开销;而且这种方式也是线程安全的,不会出现一个线程通过Lettuce更改Redis服务器中的数据之后而影响另—个线程的情况。

              3.3 操作使用

                • pom.xml
                <!--lettuce-->
                    <dependency>
                      <groupId>io.lettuce</groupId>
                      <artifactId>lettuce-core</artifactId>
                      <version>6.2.1.RELEASE</version>
                    </dependency>

                image.gif

                  • 业务类
                  package com.haomin.redis7_study.jedis_lettuce;
                  import io.lettuce.core.RedisClient;
                  import io.lettuce.core.RedisURI;
                  import io.lettuce.core.SortArgs;
                  import io.lettuce.core.api.StatefulRedisConnection;
                  import io.lettuce.core.api.sync.RedisCommands;
                  import lombok.extern.slf4j.Slf4j;
                  import java.util.HashMap;
                  import java.util.List;
                  import java.util.Map;
                  import java.util.Set;
                  /**
                   * @author haomin
                   * @date 2023/04/22 16:39
                   **/
                  @Slf4j
                  public class LettuceDemo {
                      public static void main(String[] args) {
                          // 1.使用构建器链式编程来builder我们RedisURI
                          RedisURI uri = RedisURI.builder()
                                  .redis("**.***.***.***")
                                  .withPort(6379)
                                  .withAuthentication("default", "***")
                                  .build();
                          // 2.创建连接客户端
                          RedisClient client = RedisClient.create(uri);
                          StatefulRedisConnection conn = client.connect();
                          // 3.通过conn创建操f作的comnand
                          RedisCommands<String, String> commands = conn.sync();
                          //===================操作=======================
                          // keys
                          List<String> list = commands.keys("*");
                          for (String s : list) {
                              log.info("key:{}", s);
                          }
                          commands.set("k1","1111");
                          String s1 = commands.get("k1");
                          System.out.println("String s ==="+s1);
                          //list
                          commands.lpush("myList2", "v1","v2","v3");
                          List<String> list2 = commands.lrange("myList2", 0, -1);
                          for(String s : list2) {
                              System.out.println("list ssss==="+s);
                          }
                          //set
                          commands.sadd("mySet2", "v1","v2","v3");
                          Set<String> set = commands.smembers("mySet2");
                          for(String s : set) {
                              System.out.println("set ssss==="+s);
                          }
                          //hash
                          Map<String,String> map = new HashMap<>();
                          map.put("k1","111");
                          map.put("k2","222");
                          map.put("k3","333");
                          commands.hmset("myHash2", map);
                          Map<String,String> retMap = commands.hgetall("myHash2");
                          for(String k : retMap.keySet()) {
                              System.out.println("hash  k="+k+" , v=="+retMap.get(k));
                          }
                          //zset
                          commands.zadd("myZset2", 100.0,"s1",110.0,"s2",90.0,"s3");
                          List<String> list3 = commands.zrange("myZset2",0,10);
                          for(String s : list3) {
                              System.out.println("zset ssss==="+s);
                          }
                          //sort
                          SortArgs sortArgs = new SortArgs();
                          sortArgs.alpha();
                          sortArgs.desc();
                          List<String> list4 = commands.sort("myList2",sortArgs);
                          for(String s : list4) {
                              System.out.println("sort ssss==="+s);
                          }
                          //===================操作=======================
                          //4. 关闭
                          conn.close();
                          client.shutdown();
                      }
                  }

                  image.gif

                  🍖4. 集成RedisTemplate - 推荐使用

                  4.1 连接单机

                  1. 操作使用

                    • pom.xml
                    <!--SpringBoot与Redis整合依赖-->
                        <dependency>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-starter-data-redis</artifactId>
                        </dependency>
                        <dependency>
                          <groupId>org.apache.commons</groupId>
                          <artifactId>commons-pool2</artifactId>
                        </dependency>
                        <!--swagger2-->
                        <dependency>
                          <groupId>io.springfox</groupId>
                          <artifactId>springfox-swagger2</artifactId>
                          <version>2.9.2</version>
                        </dependency>
                        <dependency>
                          <groupId>io.springfox</groupId>
                          <artifactId>springfox-swagger-ui</artifactId>
                          <version>2.9.2</version>
                        </dependency>

                    image.gif

                      • yml
                      server.port=7777
                      spring.application.name=redis7_study
                      # ========================logging=====================
                      logging.level.root=info
                      logging.level.com.atguigu.redis7=info
                      logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger- %msg%n 
                      logging.file.name=D:/mylogs2023/redis7_study.log
                      logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger- %msg%n
                      # ========================swagger=====================
                      spring.swagger2.enabled=true
                      #在springboot2.6.X结合swagger2.9.X会提示documentationPluginsBootstrapper空指针异常,
                      #原因是在springboot2.6.X中将SpringMVC默认路径匹配策略从AntPathMatcher更改为PathPatternParser,
                      # 导致出错,解决办法是matching-strategy切换回之前ant_path_matcher
                      spring.mvc.pathmatch.matching-strategy=ant_path_matcher
                      # ========================redis单机=====================
                      spring.redis.database=0
                      # 修改为自己真实IP
                      spring.redis.host=192.168.111.185
                      spring.redis.port=6379
                      spring.redis.password=111111
                      spring.redis.lettuce.pool.max-active=8
                      spring.redis.lettuce.pool.max-wait=-1ms
                      spring.redis.lettuce.pool.max-idle=8
                      spring.redis.lettuce.pool.min-idle=0

                      image.gif

                        • 业务类

                        image.gif编辑

                          • config.redisConfig
                          package com.haomin.redis7_study.config;
                          import org.springframework.context.annotation.Bean;
                          import org.springframework.context.annotation.Configuration;
                          import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
                          import org.springframework.data.redis.core.RedisTemplate;
                          import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
                          import org.springframework.data.redis.serializer.StringRedisSerializer;
                          /**
                           * @author haomin
                           * @date 2023/04/22 17:28
                           **/
                          @Configuration
                          public class RedisConfig {
                              /**
                               * redis序列化的工具配置类,下面这个请一定开启配置
                               * 127.0.0.1:6379> keys *
                               * 1) "ord:102"  序列化过
                               * 2) "\xac\xed\x00\x05t\x00\aord:102"   野生,没有序列化过
                               * this.redisTemplate.opsForValue(); //提供了操作string类型的所有方法
                               * this.redisTemplate.opsForList(); // 提供了操作list类型的所有方法
                               * this.redisTemplate.opsForSet(); //提供了操作set的所有方法
                               * this.redisTemplate.opsForHash(); //提供了操作hash表的所有方法
                               * this.redisTemplate.opsForZSet(); //提供了操作zset的所有方法
                               *
                               * @param lettuceConnectionFactory
                               * @return
                               */
                              @Bean
                              public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
                                  RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
                                  redisTemplate.setConnectionFactory(lettuceConnectionFactory);
                                  //设置key序列化方式string
                                  redisTemplate.setKeySerializer(new StringRedisSerializer());
                                  //设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认序列化
                                  redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
                                  redisTemplate.setHashKeySerializer(new StringRedisSerializer());
                                  redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
                                  redisTemplate.afterPropertiesSet();
                                  return redisTemplate;
                              }
                          }

                          image.gif

                            • config.SwaggerConfig
                            package com.haomin.redis7_study.config;
                            import org.springframework.beans.factory.annotation.Value;
                            import org.springframework.context.annotation.Bean;
                            import org.springframework.context.annotation.Configuration;
                            import springfox.documentation.builders.ApiInfoBuilder;
                            import springfox.documentation.builders.PathSelectors;
                            import springfox.documentation.builders.RequestHandlerSelectors;
                            import springfox.documentation.service.ApiInfo;
                            import springfox.documentation.spi.DocumentationType;
                            import springfox.documentation.spring.web.plugins.Docket;
                            import springfox.documentation.swagger2.annotations.EnableSwagger2;
                            import java.time.LocalDateTime;
                            import java.time.format.DateTimeFormatter;
                            /**
                             * @author haomin
                             * @date 2023/04/22 17:28
                             **/
                            @Configuration
                            @EnableSwagger2
                            public class SwaggerConfig {
                                @Value("${spring.swagger2.enabled}")
                                private Boolean enabled;
                                @Bean
                                public Docket createRestApi() {
                                    return new Docket(DocumentationType.SWAGGER_2)
                                            .apiInfo(apiInfo())
                                            .enable(enabled)
                                            .select()
                                            .apis(RequestHandlerSelectors.basePackage("com.haomin.redis7_study")) //你自己的package
                                            .paths(PathSelectors.any())
                                            .build();
                                }
                                public ApiInfo apiInfo() {
                                    return new ApiInfoBuilder()
                                            .title("springboot利用swagger2构建api接口文档 " + "\t" + DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDateTime.now()))
                                            .description("springboot+redis整合")
                                            .version("1.0")
                                            .termsOfServiceUrl("https://haomin.blog.csdn.net/")
                                            .build();
                                }
                            }

                            image.gif

                              • controller.OrderController
                              package com.haomin.redis7_study.controller;
                              import com.haomin.redis7_study.service.OrderService;
                              import io.swagger.annotations.Api;
                              import io.swagger.annotations.ApiOperation;
                              import lombok.extern.slf4j.Slf4j;
                              import org.springframework.web.bind.annotation.PathVariable;
                              import org.springframework.web.bind.annotation.RequestMapping;
                              import org.springframework.web.bind.annotation.RequestMethod;
                              import org.springframework.web.bind.annotation.RestController;
                              import javax.annotation.Resource;
                              /**
                               * @author haomin
                               * @date 2023/04/22 17:52
                               **/
                              // 访问:http://localhost:7777/swagger-ui.html#/
                              @Api(tags = "订单接口")
                              @RestController
                              @Slf4j
                              public class OrderController
                              {
                                  @Resource
                                  private OrderService orderService;
                                  @ApiOperation("新增订单")
                                  @RequestMapping(value = "/order/add",method = RequestMethod.POST)
                                  public void addOrder()
                                  {
                                      orderService.addOrder();
                                  }
                                  @ApiOperation("按orderId查订单信息")
                                  @RequestMapping(value = "/order/{id}", method = RequestMethod.GET)
                                  public String findUserById(@PathVariable Integer id)
                                  {
                                      return orderService.getOrderById(id);
                                  }
                              }

                              image.gif

                                • service.OrderService
                                package com.haomin.redis7_study.service;
                                import lombok.extern.slf4j.Slf4j;
                                import org.springframework.data.redis.core.RedisTemplate;
                                import org.springframework.stereotype.Service;
                                import javax.annotation.Resource;
                                import java.util.UUID;
                                import java.util.concurrent.ThreadLocalRandom;
                                /**
                                 * @author haomin
                                 * @date 2023/04/22 17:28
                                 **/
                                @Service
                                @Slf4j
                                public class OrderService {
                                    public static final String ORDER_KEY = "order:";
                                    @Resource
                                    private RedisTemplate redisTemplate;
                                    public void addOrder() {
                                        int keyId = ThreadLocalRandom.current().nextInt(1000) + 1;
                                        String orderNo = UUID.randomUUID().toString();
                                        redisTemplate.opsForValue().set(ORDER_KEY + keyId, "京东订单" + orderNo);
                                        log.info("=====>编号" + keyId + "的订单流水生成:{}", orderNo);
                                    }
                                    public String getOrderById(Integer id) {
                                        return (String) redisTemplate.opsForValue().get(ORDER_KEY + id);
                                    }
                                }

                                image.gif

                                2. 测试

                                访问:访问:http://localhost:7777/swagger-ui.html#/

                                image.gif编辑

                                  • 如果使用RedisTemplate,推荐序列化用StringRedisSerializer,默认使用的是JdkSerializationRedisSerializer,存入Redis会出现乱码问题,查询非常不方便

                                  image.gif编辑

                                  4.2 连接集群

                                  1.正常启动

                                    • 启动前面配的集群
                                    • 改写YML(注意IP和端口)
                                    # ========================redis集群=====================
                                    spring.redis.password=111111
                                    # 获取失败 最大重定向次数
                                    spring.redis.cluster.max-redirects=3
                                    spring.redis.lettuce.pool.max-active=8
                                    spring.redis.lettuce.pool.max-wait=-1ms
                                    spring.redis.lettuce.pool.max-idle=8
                                    spring.redis.lettuce.pool.min-idle=0
                                    spring.redis.cluster.nodes=***.***.***.***:6381,***.***.***.***:6382 (主机:port)

                                    image.gif

                                    2. 测试

                                    访问:访问:http://localhost:7777/swagger-ui.html#/

                                    3. 一台master宕机,java报错

                                      • 让master-6381宕机,shutdown
                                      • 查看集群信息 ,看slave是否上位 Cluster nodes
                                      • 我们客户端再次读写
                                      • 原因是因为SpringBoot客户端没有动态感知到RedisCluster的最新集群信息
                                      • 导致这个的原因是
                                        • Spring Boot 2,Redis默认的是 Lettuce
                                        • 当Redis集群节点发生变化后,Lettuce默认是不会刷新节点拓扑
                                          • 解决方法:
                                            1. 排除Lettuce采用jedis(不推荐)
                                              1. image.gif编辑
                                                1. 排除Lettuce采用jedis(不推荐)
                                                2. 刷新节点结群拓扑和动态感应(推荐)
                                                  • 修改pom.xml
                                                  # ========================redis集群=====================
                                                  spring.redis.password=111111
                                                  # 获取失败 最大重定向次数
                                                  spring.redis.cluster.max-redirects=3
                                                  spring.redis.lettuce.pool.max-active=8
                                                  spring.redis.lettuce.pool.max-wait=-1ms
                                                  spring.redis.lettuce.pool.max-idle=8
                                                  spring.redis.lettuce.pool.min-idle=0
                                                  # ========================新增=====================
                                                  #支持集群拓扑动态感应刷新,自适应拓扑刷新是否使用所有可用的更新,默认false关闭
                                                  spring.redis.lettuce.cluster.refresh.adaptive=true
                                                  #定时刷新
                                                  spring.redis.lettuce.cluster.refresh.period=2000
                                                  spring.redis.cluster.nodes=***.***.***.***:6381,***.***.***.***:6382 (主机:port)
                                                  • image.gif

                                                      reids初级篇分享到此,感谢大家观看!!!

                                                      如果你喜欢这篇文章,请点赞关注吧,或者如果你对文章有什么困惑,可以私信我。

                                                      🏓🏓🏓

                                                      相关实践学习
                                                      基于Redis实现在线游戏积分排行榜
                                                      本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
                                                      云数据库 Redis 版使用教程
                                                      云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
                                                      相关文章
                                                      |
                                                      21天前
                                                      |
                                                      存储 NoSQL Java
                                                      使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
                                                      通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
                                                      64 5
                                                      |
                                                      1月前
                                                      |
                                                      NoSQL Java API
                                                      springboot项目Redis统计在线用户
                                                      通过本文的介绍,您可以在Spring Boot项目中使用Redis实现在线用户统计。通过合理配置Redis和实现用户登录、注销及统计逻辑,您可以高效地管理在线用户。希望本文的详细解释和代码示例能帮助您在实际项目中成功应用这一技术。
                                                      41 4
                                                      |
                                                      1月前
                                                      |
                                                      消息中间件 NoSQL Java
                                                      Spring Boot整合Redis
                                                      通过Spring Boot整合Redis,可以显著提升应用的性能和响应速度。在本文中,我们详细介绍了如何配置和使用Redis,包括基本的CRUD操作和具有过期时间的值设置方法。希望本文能帮助你在实际项目中高效地整合和使用Redis。
                                                      57 2
                                                      |
                                                      2月前
                                                      |
                                                      缓存 NoSQL Java
                                                      Spring Boot与Redis:整合与实战
                                                      【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
                                                      142 2
                                                      |
                                                      1月前
                                                      |
                                                      JavaScript NoSQL Java
                                                      CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
                                                      CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
                                                      47 0
                                                      |
                                                      2月前
                                                      |
                                                      Java Maven Docker
                                                      gitlab-ci 集成 k3s 部署spring boot 应用
                                                      gitlab-ci 集成 k3s 部署spring boot 应用
                                                      |
                                                      28天前
                                                      |
                                                      消息中间件 监控 Java
                                                      您是否已集成 Spring Boot 与 ActiveMQ?
                                                      您是否已集成 Spring Boot 与 ActiveMQ?
                                                      52 0
                                                      |
                                                      5月前
                                                      |
                                                      监控 druid Java
                                                      spring boot 集成配置阿里 Druid监控配置
                                                      spring boot 集成配置阿里 Druid监控配置
                                                      320 6
                                                      |
                                                      5月前
                                                      |
                                                      Java 关系型数据库 MySQL
                                                      如何实现Springboot+camunda+mysql的集成
                                                      【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
                                                      427 4
                                                      |
                                                      5月前
                                                      |
                                                      消息中间件 Java 测试技术
                                                      【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
                                                      【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
                                                      388 1