您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何使用Redis+SpringBoot實現定時任務測試”,在日常操作中,相信很多人在如何使用Redis+SpringBoot實現定時任務測試問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用Redis+SpringBoot實現定時任務測試”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Redis實現定時任務是基于對RedisKey值的監控
建一個SpringBoot項目
引入依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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.0 https://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/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>redistask</artifactId> <version>0.0.1-SNAPSHOT</version> <name>redistask</name> <description>Demo project for Spring Boot</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
新建一個配置類
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實現定時任務測試”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。