如何使用Redis+SpringBoot实现定时任务测试

如何使用Redis+SpringBoot实现定时任务测试

这篇文章主要介绍“如何使用Redis+SpringBoot实现定时任务测试”,在日常操作中,相信很多人在如何使用Redis+SpringBoot实现定时任务测试问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Redis+SpringBoot实现定时任务测试”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Redis实现定时任务是基于对RedisKey值的监控

具体代码实现:

  • 建一个SpringBoot项目

  • 引入依赖

<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.4</version><relativePath/><!--lookupparentfromrepository--></parent><groupId>com.example</groupId><artifactId>redistask</artifactId><version>0.0.1-SNAPSHOT</version><name>redistask</name><description>DemoprojectforSpringBoot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

  • 配置文件

spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.timeout=10000

  • 新建一个配置类

packagecom.zhouhong.redistask.redistaskconfig;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.listener.RedisMessageListenerContainer;/***description:Redis配置类*@author:zhouhong*@version:V1.0.0*@date:2021年3月19日上午10:58:24*/@ConfigurationpublicclassRedisTaskConfig{@BeanRedisMessageListenerContainercontainer(RedisConnectionFactoryconnectionFactory){RedisMessageListenerContainercontainer=newRedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);returncontainer;}}

  • 新建Controller,设置不同过期时间的Key值,注意这里key值最好使用当前的业务标识做前缀,不然可能出现key重复的现象。

packagecom.zhouhong.redistask.redistaskcontroller;importjava.util.Date;importjava.util.concurrent.TimeUnit;importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RestController;/***description:测试Redis定时Controller类*@author:zhouhong*@version:V1.0.0*@date:2021年3月19日上午10:59:21*/@RestControllerpublicclassRedisTaskController{@AutowiredprivateRedisTemplate<String,String>template;Loggerlogger=LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);/***设置定时key,这里key最好使用业务前缀,防止名字相同*@return*/@RequestMapping(value="putkeys",method=RequestMethod.POST)publicStringputRedisTaskKeys(){Datedate=newDate();logger.info("业务开始时间:"+date);Stringkey10S="business1"+"|"+"key10S"+"|"+"其他业务中需要使用到的参数";Stringkey20S="business1"+"|"+"key20S"+"|"+"其他业务中需要使用到的参数";template.opsForValue().set(key10S,"values",10,TimeUnit.SECONDS);template.opsForValue().set(key20S,"values",20,TimeUnit.SECONDS);return"RedisKey过期键设置成功";}}

  • 新建Service用来监控过期Key,并且针对不同时间做不同的业务

packagecom.zhouhong.redistask.service;importjava.util.Date;importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;importorg.springframework.data.redis.connection.Message;importorg.springframework.data.redis.listener.KeyExpirationEventMessageListener;importorg.springframework.data.redis.listener.RedisMessageListenerContainer;importorg.springframework.stereotype.Component;importorg.springframework.stereotype.Service;/***description:RedisKey键监听以及业务逻辑处理*@author:zhouhong*@version:V1.0.0*@date:2021年3月19日上午10:58:52*/@Service@ComponentpublicclassRedisTaskServiceextendsKeyExpirationEventMessageListener{Loggerlogger=LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);/***@paramlistenerContainer*/publicRedisTaskService(RedisMessageListenerContainerlistenerContainer){super(listenerContainer);}@OverridepublicvoidonMessage(Messagemessage,byte[]pattern){StringexpiredKey=message.toString();//将拿到的过期键使用之前拼接时的特殊符号分割成字符数组String[]expiredKeyArr=expiredKey.split("\|");StringbusinessSign=expiredKeyArr[0].toString();StringexpiredTimeSign=expiredKeyArr[1].toString();StringothersParm=expiredKeyArr[2].toString();logger.info(businessSign+expiredTimeSign+othersParm);Datedate=newDate();//只有本业务才执行以下操作if(businessSign.equals("business1")){if(expiredTimeSign.equals("key10S")){//定时十秒钟后业务处理logger.info("十秒钟时的时间:"+date);logger.info("定时任务10秒钟已到,下面处理相关业务逻辑代码!!!");logger.info("10秒钟后的业务逻辑代码,其他业务参数"+othersParm);}elseif(expiredTimeSign.equals("key20S")){//定时十秒钟后业务处理logger.info("二十秒钟时的时间:"+date);logger.info("定时任务20秒钟已到,下面处理相关业务逻辑代码!!!");logger.info("20秒钟后的业务逻辑代码,其他业务参数"+othersParm);}}else{logger.error("非business1业务不做处理");}}}

  • 演示:

定时成功!!

到此,关于“如何使用Redis+SpringBoot实现定时任务测试”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!

发布于 2022-04-11 21:11:49
收藏
分享
海报
0 条评论
32
上一篇:Springboot2.x集成lettuce连接redis集群报超时异常怎么解决 下一篇:SpringBoot整合Redis怎么实现
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码