我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求,为了解决这样的问题,在Spring Boot 中,实现接口 CommandLineRunner 即可。
创建实现接口 CommandLineRunner 的类:
/**
* 监听完成时触发
*
* @author : Fredia
* @since : 2018年3月16日
* @version : v1.0.0
*/
@Configuration
public class AuthClientRunner implements CommandLineRunner {
@Autowired
private ServiceAuthConfig serviceAuthConfig;
@Autowired
private UserAuthConfig userAuthConfig;
@Autowired
private ServiceAuthFeign serviceAuthFeign;
@Override
public void run(String... args) throws Exception {
log.info("初始化加载用户pubKey");
try {
refreshUserPubKey();
}catch(Exception e){
log.error("初始化加载用户pubKey失败,1分钟后自动重试!",e);
}
log.info("初始化加载客户pubKey");
try {
refreshServicePubKey();
}catch(Exception e){
log.error("初始化加载客户pubKey失败,1分钟后自动重试!",e);
}
}
\ public void refreshUserPubKey(){
BaseResponse resp = serviceAuthFeign.getUserPublicKey(serviceAuthConfig.getClientId(), serviceAuthConfig.getClientSecret());
if (resp.getStatus() == HttpStatus.OK.value()) {
ObjectRestResponse<byte[]> userResponse = (ObjectRestResponse<byte[]>) resp;
this.userAuthConfig.setPubKeyByte(userResponse.getData());
}
}
public void refreshServicePubKey(){
BaseResponse resp = serviceAuthFeign.getServicePublicKey(serviceAuthConfig.getClientId(), serviceAuthConfig.getClientSecret());
if (resp.getStatus() == HttpStatus.OK.value()) {
ObjectRestResponse<byte[]> userResponse = (ObjectRestResponse<byte[]>) resp;
this.serviceAuthConfig.setPubKeyByte(userResponse.getData());
}
}
}
网友评论