@PostConstruct注解

之前写了一边草稿结果居然忘了保存了或者说不知道去哪里了,今天在写一次也算是巩固一下啊
时隔一周了已经有点忘记了之前写了啥了


首先说一下思路:


做一个功能需要一直存表,考虑可能数据量大就放到redis存储一个队列,然后再同时起一个方法
取出redis存储的数据一个一个去存表,因为要一直取所以还要用到while循环,同时开启一个线程
来共同执行,所以今天学到了一个注解@PostConstruct,在此记录一下。


说一下实现吧:


首先在方法上加上@PostConstruct注解就可以在项目启动的时候同时调用这个项目了,这个注解
只在项目启动的时候启动一次,启动了就要开启个线程共同运行new Thread(),调用run方法启
动,其中调取的时候不用那么频繁,给Thread.sleep()睡眠一下再继续调用,我这里是设置了调取
到数据和调取不到设置的时间是不同的,以便没数据时让线程等一下。之后因为需要一直调,所以
加了while死循环,这个用的多了,就不说了。再说就是redis的rpush和lpop了,我是这样用的存储
到队列,反正用成一对就可以了。取到数据save如表就可以了。


实践:


    @PostConstruct
    public void init() {
       log.info("=== init method start!===");
        new Thread(new Runnable(){
            @Override
            public void run(){
                try {
                    // 暂停2分钟,防止服务节点未启动
                    Thread.sleep(1000*20L);
                } catch (InterruptedException e) {
                    log.error(e.getMessage(), e);
                }
               log.info("=== init method thread run!===");
                Request<RedisRpcServiceLpopReq> redisReq = new Request<>();
                redisReq.setData(RedisRpcServiceLpopReq.builder().key("AAA").build());
                while (true){
                    log.info("=== init method thread loop execute start!===");
                    try {
                        // 暂停一段时间
                        Thread.sleep(500L);

                       log.info("=== init method thread redis input{}!===",JSONObject.toJSON(redisReq));
                        Response<RedisRpcServiceLpopResp> redisResp = redisService.lpop(redisReq);
                        if(!redisResp.success()){
                            continue;
                        }

                        RedisRpcServiceLpopResp popResp = redisResp.getData();
                        if(popResp == null){
                            continue;
                        }
                        log.info("=== init method thread redis getParm{}!===",JSONObject.toJSON(redisResp.getData()));
                        String val = popResp.getValue();
                        if (StringUtils.isBlank(val)){
                            continue;
                        }

                        Request<HomePageConfigRpcServiceMenuLogsReq> reqRequest = new Request<>();
                        HomePageConfigRpcServiceMenuLogsReq req = JSONObject.parseObject(val, HomePageConfigRpcServiceMenuLogsReq.class);
                        reqRequest.setData(req);

                        hotMenuService.saveMenuLogs(reqRequest);

                    } catch (Exception e) {
                        log.error(e.getMessage(), e);
                    }
                }
            }
        }).start();
    }


总结一下:用到了redis 、thread、while 、 @PostConstruct注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值