Spring 启动执行器 MySQL 数据库健康检查
Spring boot actuator MySQL database health check
我设计了一个演示 spring 启动应用程序 CRUD 操作与 MySQL 数据库。我的 application.properties 文件如下。
spring.boot.admin.url=http://localhost:8081
spring.datasource.url= jdbc:mysql://localhost:3306/springbootdb
spring.datasource.username=root
spring.datasource.password=admin
endpoints.health.sensitive=false
management.health.db.enabled=true
management.health.defaults.enabled=true
management.health.diskspace.enabled=true
spring.jpa.hibernate.ddl-auto=create-drop
POM.xml 对于 spring 执行器如下。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.3.4</version>
</dependency>
当我尝试点击 url“http://localhost:8080/health”时,我收到 {"status":"UP"} 作为响应。我想用 spring 引导执行器监视我的数据库 (MySQL)。我想查看我的数据库状态。
有人可以帮忙吗?
我会检查 the documentation - 匿名公开完整详细信息需要禁用执行器的安全性。
如果这不是您想要的,您可以完全控制安全性并使用 Spring 安全性编写您自己的规则。
如果您正在使用 spring 安全性,则默认情况下会为执行器启用安全性。
将此添加到您的属性文件中 -
management.security.enabled= false
或
在属性文件中添加用户名和密码 -
security.user.name= username
security.user.password = password
并使用这些凭据访问执行器端点。
将此配置添加到您的 application.properties 文件
management.endpoint.health.show-details=always
调用http://localhost:8080/actuator端点时,必须有如下端点。
"health-component": {
"href": "http://localhost:8080/actuator/health/{component}",
"templated": true
}
在我的例子中,我在我的应用程序中使用了 mongodb。我称它为 http://localhost:8080/actuator/health/mongo 端点 returns mongodb health.
{
"status": "UP",
"details": {
"version": "2.6.0"
}
}
我用自己的方式检查数据库连接。以下解决方案非常简单,您可以根据需要进行修改。我知道这不是特定于执行器的,尽管当您不想使用执行器时,这是一种相同的解决方法。
@RestController
@RequestMapping("/api/db/")
public class DbHealthCheckController {
@Autowired
JdbcTemplate template;
private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
@GetMapping("/health")
public ResponseEntity<?> dbHealthCheck() {
LOGGER.info("checking db health");
try {
int errorCode = check(); // perform some specific health check
if (errorCode != 1)
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ApiResponse(false, "down"));
return ResponseEntity.ok(new ApiResponse(true, "Up"));
} catch (Exception ex) {
ex.printStackTrace();
LOGGER.error("Error Occured" + ex.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ApiResponse(false, "Down"));
}
}
public int check() {
List<Object> results = template.query("select 1 from dual", new
SingleColumnRowMapper<>());
return results.size();
}
}
ApiResponse
是一个简单的 POJO class 具有 2 个属性 Boolean success
and String message
.
在 spring 版本 2.2.x 中是:
management.endpoint.health.show-details=always
默认情况下,此 prop 没有值。
我设计了一个演示 spring 启动应用程序 CRUD 操作与 MySQL 数据库。我的 application.properties 文件如下。
spring.boot.admin.url=http://localhost:8081
spring.datasource.url= jdbc:mysql://localhost:3306/springbootdb
spring.datasource.username=root
spring.datasource.password=admin
endpoints.health.sensitive=false
management.health.db.enabled=true
management.health.defaults.enabled=true
management.health.diskspace.enabled=true
spring.jpa.hibernate.ddl-auto=create-drop
POM.xml 对于 spring 执行器如下。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.3.4</version>
</dependency>
当我尝试点击 url“http://localhost:8080/health”时,我收到 {"status":"UP"} 作为响应。我想用 spring 引导执行器监视我的数据库 (MySQL)。我想查看我的数据库状态。
有人可以帮忙吗?
我会检查 the documentation - 匿名公开完整详细信息需要禁用执行器的安全性。
如果这不是您想要的,您可以完全控制安全性并使用 Spring 安全性编写您自己的规则。
如果您正在使用 spring 安全性,则默认情况下会为执行器启用安全性。
将此添加到您的属性文件中 -
management.security.enabled= false
或
在属性文件中添加用户名和密码 -
security.user.name= username
security.user.password = password
并使用这些凭据访问执行器端点。
将此配置添加到您的 application.properties 文件
management.endpoint.health.show-details=always
调用http://localhost:8080/actuator端点时,必须有如下端点。
"health-component": {
"href": "http://localhost:8080/actuator/health/{component}",
"templated": true
}
在我的例子中,我在我的应用程序中使用了 mongodb。我称它为 http://localhost:8080/actuator/health/mongo 端点 returns mongodb health.
{
"status": "UP",
"details": {
"version": "2.6.0"
}
}
我用自己的方式检查数据库连接。以下解决方案非常简单,您可以根据需要进行修改。我知道这不是特定于执行器的,尽管当您不想使用执行器时,这是一种相同的解决方法。
@RestController
@RequestMapping("/api/db/")
public class DbHealthCheckController {
@Autowired
JdbcTemplate template;
private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
@GetMapping("/health")
public ResponseEntity<?> dbHealthCheck() {
LOGGER.info("checking db health");
try {
int errorCode = check(); // perform some specific health check
if (errorCode != 1)
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ApiResponse(false, "down"));
return ResponseEntity.ok(new ApiResponse(true, "Up"));
} catch (Exception ex) {
ex.printStackTrace();
LOGGER.error("Error Occured" + ex.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ApiResponse(false, "Down"));
}
}
public int check() {
List<Object> results = template.query("select 1 from dual", new
SingleColumnRowMapper<>());
return results.size();
}
}
ApiResponse
是一个简单的 POJO class 具有 2 个属性 Boolean success
and String message
.
在 spring 版本 2.2.x 中是:
management.endpoint.health.show-details=always
默认情况下,此 prop 没有值。