重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“如何使用redis+SpringBoot实现定时任务测试”,在日常操作中,相信很多人在如何使用Redis+SpringBoot实现定时任务测试问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Redis+SpringBoot实现定时任务测试”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
网站的建设创新互联公司专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为成都履带搅拌车等企业提供专业服务。
Redis实现定时任务是基于对RedisKey值的监控
建一个SpringBoot项目
引入依赖
4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.4 com.example redistask 0.0.1-SNAPSHOT redistask Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
配置文件
spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.timeout=10000
新建一个配置类
package com.zhouhong.redistask.redistaskconfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.listener.RedisMessageListenerContainer;/** * description: Redis配置类 * @author: zhouhong * @version: V1.0.0 * @date: 2021年3月19日 上午10:58:24 */@Configurationpublic class RedisTaskConfig { @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory);return container; } }
新建Controller,设置不同过期时间的Key值,注意这里key值最好使用当前的业务标识做前缀,不然可能出现key重复的现象。
package com.zhouhong.redistask.redistaskcontroller; import java.util.Date; import java.util.concurrent.TimeUnit; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;/** * description: 测试Redis定时Controller类 * @author: zhouhong * @version: V1.0.0 * @date: 2021年3月19日 上午10:59:21 */@RestControllerpublic class RedisTaskController { @Autowiredprivate RedisTemplate< String, String> template; Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);/** * 设置定时key,这里key最好使用业务前缀,防止名字相同 * @return */@RequestMapping(value = "putkeys", method = RequestMethod.POST)public String putRedisTaskKeys() { Date date = new Date(); logger.info("业务开始时间:" + date); String key10S = "business1"+"|"+"key10S"+"|"+"其他业务中需要使用到的参数"; String key20S = "business1"+"|"+"key20S"+"|"+"其他业务中需要使用到的参数"; template.opsForValue().set(key10S, "values", 10, TimeUnit.SECONDS); template.opsForValue().set(key20S, "values", 20, TimeUnit.SECONDS);return "RedisKey过期键设置成功"; } }
新建Service用来监控过期Key,并且针对不同时间做不同的业务
package com.zhouhong.redistask.service; import java.util.Date; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service;/** * description: RedisKey键监听以及业务逻辑处理 * @author: zhouhong * @version: V1.0.0 * @date: 2021年3月19日 上午10:58:52 */@Service @Componentpublic class RedisTaskService extends KeyExpirationEventMessageListener { Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);/** * @param listenerContainer */public RedisTaskService(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Overridepublic void onMessage(Message message, byte[] pattern) { String expiredKey = message.toString(); // 将拿到的过期键使用之前拼接时的特殊符号分割成字符数组String[] expiredKeyArr = expiredKey.split("\|"); String businessSign = expiredKeyArr[0].toString(); String expiredTimeSign = expiredKeyArr[1].toString(); String othersParm = expiredKeyArr[2].toString(); logger.info(businessSign + expiredTimeSign + othersParm); Date date = new Date();// 只有本业务才执行以下操作if (businessSign.equals("business1")) {if (expiredTimeSign.equals("key10S")) {// 定时十秒钟后业务处理logger.info("十秒钟时的时间:"+ date); logger.info("定时任务10秒钟已到,下面处理相关业务逻辑代码!!!"); logger.info("10秒钟后的业务逻辑代码,其他业务参数" + othersParm); } else if (expiredTimeSign.equals("key20S")) {// 定时十秒钟后业务处理logger.info("二十秒钟时的时间:"+ date); logger.info("定时任务20秒钟已到,下面处理相关业务逻辑代码!!!"); logger.info("20秒钟后的业务逻辑代码,其他业务参数" + othersParm); } } else { logger.error("非business1业务不做处理"); } } }
演示:
定时成功!!
到此,关于“如何使用Redis+SpringBoot实现定时任务测试”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!