Spring 所有bean加载后执行事件
当springbean加载完成后,spring会派发ContextRefreshedEvent事件,通过此事件可以调用启动后默认逻辑。
代码如下,需要配置此bean被spring扫描到
1 |
<context:component-scan base-package="包名"/> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
@Component("BeanDefineConfigue") public class TakeQueueListener implements ApplicationListener<ContextRefreshedEvent>{ private static final Logger logger = LoggerFactory.getLogger(TakeQueueListener.class); @Autowired private QueueService queueService; @Autowired private UserEventService userEventService; @Autowired private UtilService utilService; @Override public void onApplicationEvent(ContextRefreshedEvent event) { Runnable runnable = new Runnable() { @Override public void run() { logger.debug("TakeQueueListener start"); long ttlTime = 30*60*1000;//半小时 while(true){ try { UserEvent userEvent = queueService.bpop(UserEventService.USER_PARENT_EVENT_QUEUE, UserEvent.class); logger.debug("TakeQueueListener take data:{}",userEvent); userEventService.insertUserEvent(userEvent); //根据applicationId_userId_eventType 存储mregeCount // String key = userEvent.getApplicationId().code()+"_"+userEvent.getUserId()+"_"+userEvent.getExtType().code(); // if(!RedisHelper.isExist(key)){ // //如果不存在则set值,并设置ttl // userEvent.setMergeCount(1); // userEvent.setEventTime(new Date()); // RedisHelper.set(key, 1); // RedisHelper.pexpire(key, ttlTime); // }else{ // //如果存在则mergeCount加一 // Long mergeCount = RedisHelper.incr(key); // userEvent.setMergeCount(Integer.valueOf(""+mergeCount)); // userEvent.setEventTime(new Date()); // userEventService.updateUserEvent(userEvent); // } Thread.sleep(50); } catch (Exception e) { logger.debug("TakeQueueListener error{}",e); } } } }; Thread t = new Thread(runnable); t.setName("takeQueue"); t.start(); } } |
©版权声明:本文为【翰林小院】(huhanlin.com)原创文章,转载时请注明出处!
发表评论