1.自定义EndPoint简介
spring-boot-starter-actuator模块中已经提供了大量原生端点,根据端点作用,可将原生端点分为以下三类。
应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与SpringBoot应用密切相关的配置类信息。
度量指标类:获取应用程序在运行过程中用于监控的度量指标,如内存信息、线程池信息和HTTP请求统计等。
操作控制类:提供了对应用的关闭等操作类功能。
如果spring-boot-starter-actuator模块提供的原生端点无法满足需求,开发者还可以自定义端点,如本小节使用自定义UserEndPoint来监控用户总数。
2.引入依赖
新建一个SpringBoot工程,并在pom.xml文件中添加自定义EndPoint所需要的dependency。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3.添加配置
在application.properties文件中添加如下配置信息。
############################################################
#
# MySQL配置
#
############################################################
### 连接信息
spring.datasource.url = jdbc:mysql://localhost:3306/mydb
### 用户名
spring.datasource.username = root
### 密码
spring.datasource.password = admin123
### 驱动
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
############################################################
#
# MyBatis配置
#
############################################################
### po类存放目录
mybatis.type-aliases-package = com.leichuangkj.endpoint.dao.po
### mapper(.xml)资源文件存放路径
mybatis.mapper-locations = classpath:mybatis/mapper/*.xml
############################################################
#
# 应用监控配置
#
############################################################
### 指定访问监控方法的端口
management.server.port = 8080
### 开启所有端点
management.endpoints.web.exposure.include = *
### 启用userEndPoints端点并禁用其它所有端点
management.endpoints.enabled-by-default = false
management.endpoints.userEndPoint.enabled = true
4.dao层开发
首先在项目目录“/src/main/java/com/leichuangkj/endpoint”下新建“/dao/po”目录,并在po目录下新建User实体类,具体代码如下。
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
private Integer id;
private String name;
private String email;
}
然后在dao目录下新建mapper目录,并在mapper目录下新建UserMapper接口,具体代码如下。
@Repository
public interface UserMapper {
Integer getTotalNum();
}
最后在resource目录下新建“mybatis/mapper”目录,并在mapper目录下新建UserMapper.xml文件,具体代码如下。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.leichuangkj.endpoint.dao.mapper.UserMapper" >
<select id="getTotalNum" resultType="java.lang.Integer">
select count(1) from user
</select>
</mapper>
5.service层开发
在项目目录“/src/main/java/com/leichuangkj/endpoint”下新建service目录,并在service目录下新建IUser接口,具体代码如下。
public interface IUser {
Integer getTotalNum();
}
然后在service目录下新建impl目录,并在impl目录下新建UserImpl实现类,具体代码如下。
@Service
public class UserImpl implements IUser {
@Autowired
UserMapper userMapper;
@Override
public Integer getTotalNum() {
return userMapper.getTotalNum();
}
}
6.endpoint开发
在项目目录“/src/main/java/com/leichuangkj/endpoint”下新建actuator目录,并在actuator目录下新建UserEndPoint类,具体代码如下。
@Component
@Endpoint(id = "userEndPoint")
public class UserEndPoint{
@Autowired
private UserImpl userImpl;
@ReadOperation
public Map<String,Object> invoke(){
Map<String,Object> map = new HashMap<>();
map.put("currentTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
map.put("userTotal",userImpl.getTotalNum());
return map;
}
}
7.启动项目
在启动类EndpointApplication上添加注解“@MapperScan(basePackages = “com.leichuangkj.endpoint.dao.mapper”)”,然后启动项目。
@MapperScan(basePackages = "com.leichuangkj.endpoint.dao.mapper")
@SpringBootApplication
public class EndpointApplication {
public static void main(String[] args) {
SpringApplication.run(EndpointApplication.class, args);
}
}
8.测试
启动项目,然后在浏览器中请求“http://localhost:8080/actuator”,可以查询到如下图所示的信息。
点击“http://localhost:8080/actuator/userEndPoint”查看数据库用户总人数,测试结果如下图所示。
9.工程目录结构