在spring整个服务启动后做一些事


起因: 因为服务器启动时,保存的数据和node层保存的数据不一致。虽然有定时同步的功能,但是启动后到第一次同步之间有段真空期,所有这个问题最后评估下来是要修复的。

经过思考后,决定服务器启动时,向redis里推送一条消息提示前端要同步数据。因此使用了以前用过的@PostConstruct试图解决这个问题。

代码如下:

@Configuration
public class TransferSecretKeySyncConfig {

    private static final String CHANNEL = "iot_restart";
    private static final String RESTART_MESSAGE = "{\"type\":\"restart\"}";

    @Autowired
    private RedisAgent redisAgent;

    @PostConstruct
    public void syncTransferSecretLKey(){
        redisAgent.publish(CHANNEL, RESTART_MESSAGE);
    }

}

但是和前端一起测试时发现问题: 服务器启动时发送的消息没有生效, 后来去查看log发现,前端确实发送了请求,但是请求结果返回是502。
后枉然大悟,使用@PostConstract往redis里发送消息时,服务器还没完全启动,这时调用接口返回502也是意料之中的事。 因此便去寻找在服务器完全启动后做一些事的方法。

修改后

@Component
@Slf4j
public class TransferSecretKeySyncConfig implements CommandLineRunner {

    private static final String CHANNEL = "iot_restart";
    private static final String RESTART_MESSAGE = "{\"type\":\"restart\"}";

    @Autowired
    private RedisAgent redisAgent;

    @Override
    public void run(String... args) throws Exception {
        log.info("send sync transfer secret key to redis...");
        redisAgent.publish(CHANNEL, RESTART_MESSAGE);
    }
}

得以解决


   转载规则


《在spring整个服务启动后做一些事》 echi1995 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
.net core 3.0踩坑日记 .net core 3.0踩坑日记
.net core 3.0 踩坑日记 三天前,老大要求把一个项目从java改到.net。因为没碰过.net,便开始了磕磕绊绊的踩坑之旅。1. https问题。在刚开始熟悉.net时,使用vs自动生成了一个webapi的项目,但是问题出现了,
2019-11-01
下一篇 
drools使用过程中遇到的坑 (零) drools使用过程中遇到的坑 (零)
最近公司的开发任务是规则引擎这个东西。 大概想要做成的东西是这个亚子。 于是领导调查了一下,让我去看drools这个框架。具体drools怎么用网上很多博客都有讲,我会把参考到的几个写的比较清楚的帖子贴在下面。 初识drools第一次去看的
2019-09-22
  目录