目录

  • 1. 健康检测
  • 2. application.properties 配置
  • 3. 引入jar包
  • 4. 添加一个接口检测数据库连接
  • 5. 创建一个健康检测实现类
  • 6. 启动项目,查看服务列表
  • 7. 查看健康状态
  • 8. 修改数据库连接状态
  • 9. 再次查看健康状态
  • 10. 再次查看服务列表
  • 代码下载地址


项目搭建参考

1. 健康检测

  • Eureka 默认的健康检测只是你校验服务连接是否是 UP 还是 DOWN 的,然后客户端只会调用状态为 UP 状态的服务,但是有的情况下,虽然服务连接是好的,但是有可能这个服务的某些接口不是正常的,可能由于需要连接 Redis,mongodb 或者 DB 有问题导致接口调用失败, 所以理论上服务虽然能够正常调用,但是它不是一个健康的服务。所以我们就有必要对这种情况做自定义健康检测。

2. application.properties 配置

java服务健康检查脚本 java健康检查接口_fish

eureka.client.healthcheck.enabled=true

3. 引入jar包

java服务健康检查脚本 java健康检查接口_java服务健康检查脚本_02

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

4. 添加一个接口检测数据库连接

  • 这里通过调用接口,模拟修改数据库的连接状态
package com.spring.fisher.Controller;

import com.spring.fisher.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/queryUser")
    public String queryUser() {
        return userService.queryContents();
    }
    public static boolean dbFlag = true;
    /**
     * 检测db连接是否ok
     */
    @RequestMapping("/db/{can}")
    public void setDb(@PathVariable boolean can) {
        dbFlag = can;
    }

}

5. 创建一个健康检测实现类

  • 正常情况下应该在 health 方法里面去连接数据库,如果连接异常了则返回 DOWN,如果没异常则返回 UP,这个 health 方法是线程去调用的,隔一段时间调用一次,这里为了方便,使用上面的接口来修改数据库的连接状态

java服务健康检查脚本 java健康检查接口_SpringCloud_03

package com.spring.fisher.health;

import com.spring.fisher.Controller.UserController;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.Status;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MicroWebHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        if (UserController.dbFlag) {
            return new Health.Builder(Status.UP).build();
        }else {
            return new Health.Builder(Status.DOWN).build();
        }
    }
}

6. 启动项目,查看服务列表

java服务健康检查脚本 java健康检查接口_java服务健康检查脚本_04


java服务健康检查脚本 java健康检查接口_fish_05

7. 查看健康状态

  • http://localhost:8083/actuator/health

java服务健康检查脚本 java健康检查接口_spring_06

8. 修改数据库连接状态

  • http://localhost:8083/db/false

9. 再次查看健康状态

  • {“status”:“DOWN”}

java服务健康检查脚本 java健康检查接口_fish_07

10. 再次查看服务列表

  • DOWN (1) - DESKTOP-LT2HQFS:micro-web:8083

java服务健康检查脚本 java健康检查接口_fish_08