一 加入Actuator
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
查看/health端点
二 新建my-health-provider
1 新建依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
</dependencies>
2 新建配置
spring:
application:
name: my-health-provider
endpoints:
sensitive: false
eureka:
client:
instanceInfoReplicationIntervalSeconds: 10
serviceUrl:
defaultZone: http://localhost:8761/eureka/
3 新建控制类
package org.crazyit.cloud;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PoliceController {
@RequestMapping(value = "/call/{id}", method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public Police call(@PathVariable Integer id) {
Police p = new Police();
p.setId(id);
p.setName("angus");
return p;
}
// 能否访问数据库的标识
public static boolean canVisitDb = true;
@RequestMapping(value = "/db/{can}", method = RequestMethod.GET)
public void setDb(@PathVariable boolean can) {
canVisitDb = can;
}
}
4 新建健康指示器
package org.crazyit.cloud;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.Status;
import org.springframework.stereotype.Component;
@Component
public class MyHealthIndicator implements HealthIndicator {
public Health health() {
if(PoliceController.canVisitDb) {
return new Health.Builder(Status.UP).build();
} else {
return new Health.Builder(Status.DOWN).build();
}
}
}
5 测试
结果为:
{"status":"DOWN"}
6 新建健康检查处理器,实现传播状态到服务器
package org.crazyit.cloud;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.health.Status;
import org.springframework.stereotype.Component;
import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.appinfo.InstanceInfo.InstanceStatus;
@Component
public class MyHealthCheckHandler implements HealthCheckHandler {
@Autowired
private MyHealthIndicator halthIndicator;
public InstanceStatus getStatus(InstanceStatus currentStatus) {
Status status = halthIndicator.health().getStatus();
if(status.equals(Status.UP)) {
return InstanceStatus.UP;
} else {
return InstanceStatus.DOWN;
}
}
}
7 测试Eureka的页面