java健康检查healthcheck
其实很多人会问,springclound里面不是有集成healthcheck么?
对,问的很好,但是往往很多小公司或者一些老的代码并不一定都是集成了springclound的。
但是作为服务治理很重要的一环,就必须要再cicd中加入这一环,才能健康的让服务引入流量
目的:
1. 有些隐藏的账号密码不掌握在我们手里,又不知道是否配置正确,可以在healthcheck中进行check, 如数据库,可以用select 1进行测试
2. 多数据源每个数据源是否配置正确?
3. 防止冷启动:数据库,redis等
做法:自定义一个controller进行单独供调用使用
@RestController
@RequestMapping(value = "/")
public class HealthCheckController {
@Resource
private HealthCheckMapper healthCheckMapper;
@Resource
private StringRedisTemplate stringRedisTemplate;
/**
* 健康检查:注意此接口不能被拦截器把异常吃掉
*/
@GetMapping(value = {"healthCheck"})
@ApiOperation(value = "健康检查", notes = "1.数据库检查,2.redis检查")
public Resp healthCheck() {
// 1.数据库检查 直接是select 1的sql
healthCheckMapper.select1();
// 多数据源可以在此切换数据源进行验证
// 2.redis检查
stringRedisTemplate.opsForValue().get("1");
return Resp.success();
}
}
另外,很多check可能直接根据code进行验证的,如果系统有统一拦截器,需要找出来,否则统一异常处理可能将该处异常吃掉,那么则该检查检查将没有什么意义了