1.创建ApplicationContext对象

package com.cloud.drore.eboss.dealer.util;import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;/*** ** @Description: <br>* @Project: eboos <br>* @CreateDate: Created in 2018/2/28 20:44 <br>* @Author: <a href="410508961@qq.com">夏凯</a>*/
@Component
public class ApplicationContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext = null;// 非@import显式注入,@Component是必须的,且该类必须与main同包或子包// 若非同包或子包,则需手动import 注入,有没有@Component都一样// 可复制到Test同包测试@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if (ApplicationContextUtil.applicationContext == null) {ApplicationContextUtil.applicationContext = applicationContext;}System.out.println("---------------com.ilex.jiutou.util.Test.Main.SubPackage.SpringUtil---------------");}//获取applicationContextpublic static ApplicationContext getApplicationContext() {return applicationContext;}//通过name获取 Bean.public static Object getBean(String name) {return getApplicationContext().getBean(name);}//通过class获取Bean.public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}//通过name,以及Clazz返回指定的Beanpublic static <T> T getBean(String name, Class<T> clazz) {return getApplicationContext().getBean(name, clazz);}
}

2.项目启动后开启redis的监听

package com.cloud.drore.eboss.config;import com.cloud.drore.eboss.dealer.util.ApplicationContextUtil;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;/*** ** @Description: 项目启动后,开启监听Redis到期的类<br>* @Project: eboos <br>* @CreateDate: Created in 2018/3/16 10:21 <br>* @Author: <a href="747639122@qq.com">冯腾</a>*/
@Component
public class MyApplicationRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments applicationArguments) {JedisPoll jedisPoll = ApplicationContextUtil.getBean(JedisPoll.class);JedisPool jedisPool = jedisPoll.redisPoolFactory();Jedis jedis = jedisPool.getResource();jedis.psubscribe(new KeyExpiredListener(), "__key*__:*");System.out.println("MyApplicationRunner class will be execute when the project was started!");}
}

3.得到redisPool

package com.cloud.drore.eboss.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** ** @Description: 得到redisPool<br>* @Project: eboos <br>* @CreateDate: Created in 2018/3/15 18:44 <br>* @Author: <a href="410508961@qq.com">夏凯</a>*/
@Configuration
public class JedisPoll {@AutowiredRedisProperties redisProperties;@Beanpublic JedisPool redisPoolFactory() {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxIdle(redisProperties.getPool().getMaxIdle());jedisPoolConfig.setMaxWaitMillis(redisProperties.getPool().getMaxWait());JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisProperties.getHost(), redisProperties.getPort(), redisProperties.getTimeout());return jedisPool;}
}

4.执行redis监听到期后的业务

package com.cloud.drore.eboss.config;import com.cloud.drore.eboos.common.entity.dealer.Order;
import com.cloud.drore.eboss.dealer.entity.OrderOperationRecord;
import com.cloud.drore.eboss.dealer.util.ApplicationContextUtil;
import com.cloud.drore.eboss.factory.mapper.FactoryOrderMapper;
import com.cloud.drore.eboss.factory.mapper.FactoryOrderOperationRecordMapper;
import com.cloud.drore.eboss.factory.mapper.FactoryOrderProductMapper;
import redis.clients.jedis.JedisPubSub;import java.math.BigDecimal;
import java.util.Date;/*** ** @Description: 执行Redis监听和到期的类<br>* @Project: eboos <br>* @CreateDate: Created in 2018/3/15 19:07 <br>* @Author: 410508961@qq.com*/
public class KeyExpiredListener extends JedisPubSub {@Overridepublic void onPSubscribe(String pattern, int subscribedChannels) {System.out.println("onPSubscribe " + pattern + " " + subscribedChannels);}@Overridepublic void onPMessage(String pattern, String channel, String orderNum) {System.out.println("onPMessage pattern " + pattern + " " + channel + " " + orderNum);// 得到factoryOrderMapperFactoryOrderMapper factoryOrderMapper = ApplicationContextUtil.getBean(FactoryOrderMapper.class);Order order = factoryOrderMapper.findOrderByOrderNum(orderNum);// 如果订单状态为预订失败,待支付或者出票失败时if (order.getOrderStatus() ==2 || order.getOrderStatus() == 4 || order.getOrderStatus() == 6){order.setOrderStatus(3);// 更新订单主表状态factoryOrderMapper.updateByPrimaryKey(order);// 得到factoryOrderProductMapperFactoryOrderProductMapper factoryOrderProductMapper= ApplicationContextUtil.getBean(FactoryOrderProductMapper.class);// 更新订单子表状态factoryOrderProductMapper.updateByOrderNum(orderNum,order.getOrderStatus());// 增加订单记录FactoryOrderOperationRecordMapper factoryOrderOperationRecordMapper = ApplicationContextUtil.getBean(FactoryOrderOperationRecordMapper.class);OrderOperationRecord orderOperationRecord = new OrderOperationRecord();orderOperationRecord.setOrderId(order.getId());orderOperationRecord.setOperationDate(new Date());orderOperationRecord.setShouldPayment(order.getTotalPrice());orderOperationRecord.setActuallyPayment(new BigDecimal(0));orderOperationRecord.setShouldRefund(new BigDecimal(0));orderOperationRecord.setActuallyRefund(new BigDecimal(0));orderOperationRecord.setCurrentStatus(order.getOrderStatus());factoryOrderOperationRecordMapper.insert(orderOperationRecord);}}}

5.项目相关demo

git相关链接

6.执行成功截图

Redis监听失效的字段相关推荐

  1. 同时设置min-height和max-height后el-scrollbar滚动监听失效?

    记录一下憨憨操作,排查+看源码花了一个小时,还以为是el-scrollbar组件本身监听有问题,还跑去看element-ui的源码了. 使用el-scrollbar组件出错 原本好好的简单的分类列表, ...

  2. 【SpringBoot】35、SpringBoot整合Redis监听Key过期事件

    在实际的开发项目中,监听 key 的过期事件,应用非常广泛,例如:订单超时未支付,优惠券过期等等 一.说明 本篇文章是继: [SpringBoot]三十四.SpringBoot整合Redis实现序列化 ...

  3. springboot 使用 redis 监听 key 的过期回调( 模拟设置订单号超时时间, 触发修改订单状态业务逻辑)

    本文Demo地址:https://gitee.com/wslxm/spring-boot-redis 一.redis 配置文件 redis.conf 修改如下 notify-keyspace-even ...

  4. java redis监听问题_springboot+redis过期事件监听实现过程解析

    1 修改 redis.conf配置文件: K Keyspace events, published with keyspace@ prefix事件 E Keyevent events, publish ...

  5. 解决阿里云redis监听6379,配置规则也将6379端口开放,但是外网仍无法连接6379的问题。

    问题描述: 阿里云linux安装完成redis,并且已经运行,检测6379端口,显示redis-server正在监听,如图 查看阿里云端口配置规则,6379端口对外开放 解决方法: 查看阿里云端口开放 ...

  6. 横屏展示 fragment 监听面积并非全屏,部分面积监听失效

    具体效果如下: 将这个textview 向左移动,那么都可以监听,如上图.如果控件向右移,只有第一个textview 刚刚出头的部分可以监听,如下图 貌似监听宽度还只是竖屏!? 原因:在fragmen ...

  7. Java日记_17.9.01——点击按钮后,键盘监听失效的原因与解决办法

    最近在自学JAVA,听了前辈的安利在做自己的小画板,然后悲剧就发生了,同时添加按钮和键盘监听之后,就产生了如题的问题,一直觉得是自己监听事件注册的不对,改了一天,然后终于找到了原因,真的巨坑啊我觉得q ...

  8. 鼠标事件mousemove拖动到iframe上监听失效问题

    问题:监听鼠标拖动事件mousemove,当鼠标移动到页面嵌的iframe上时,事件无法被监听到,当鼠标移出iframe后,事件又能被监听到了. 解决:可以创建一个层级高的div覆盖在整个项目上面,然 ...

  9. Redis监听key过期事件

    通过Redis的过期策略,触发某些事件可以向指定的频道发送通知. 1. 修改redis配置文件,图示为windows下的配置,其他系统同理: notify-keyspace-events 的参数为 & ...

最新文章

  1. 十年Java编程开发生涯,java计算时间差毫秒
  2. Python 中的高级斗技,让函数返回结果的技巧
  3. weblogic 升级bsu_Weblogic补丁升级之坑坑洼洼
  4. 漫画 | 面试的我 VS 真实的我
  5. Linux系统C语言实现 根据进程号/进程名获取进程的运行时间
  6. python列表推导式中使用if和if-else
  7. python 类型转换操作
  8. 怎样用一个3升的杯子和一个5升的杯子装出4升水来(杯子没有刻度)?
  9. java开发利器 eclipse从入门到精通 pdf_Java从入门到精通(第4版)高清PDF下载
  10. 回味宋朝——文化的盛世
  11. iPhone无法开机? 一招帮你“救活”
  12. iptables路由转换
  13. 带你玩东方系列(视频版)游戏链接
  14. 一张图看懂手机CPU性能——手机CPU性能天梯图
  15. ValidFrom验证控件
  16. 计算机专业简历教育背景怎么写,简历中教育背景怎么写?填写教育背景注意事项...
  17. 计算机知识中Q是啥意思,物理电学中Q和q分别代表什么意思,初中物理电学的所有知识点,要全面!...
  18. Swift Mark的使用
  19. 信号与系统——FT、FS、DTFT、DFS、DFT、FFT(一)
  20. monkey自定义脚本

热门文章

  1. python打开图片文件-Python怎么读取图片
  2. 在经济寒冬的乱七八糟的瞎说
  3. 自动安装第三方库python,python第三方库自动安装脚本
  4. Transform.RotateAround 围绕旋转
  5. AI 智能修复老照片,效果惊艳到我了!| 附代码
  6. 艾永亮:耐克阿迪都慌了,成功逆袭的李宁,产品创新战略是什么
  7. H5互动游戏平台推荐:盘点那些超火的多人小游戏互动对战平台
  8. 商品管理系统SSM练习开发详细手册
  9. 数据表与简单Java类映射转换(一对多、多对多、角色与权限) - Java基础知识 6
  10. 【原创】CSS3 制作奥林匹克五环