Spring Boot Admin
简介
使用
Spring Boot Admin
可以管理和监控你的 Spring Boot 项目。它分为客户端和服务端两部分,客户端添加到你的 Spring Boot 应用增加暴漏相关信息的
HTTP
接口,然后注册到Spring Boot Admin
服务端,这一步骤可以直接向服务端注册,也可以通过Eureka
或者Consul
进行注册。
Spring Boot Admin Server
通过Vue.js
程序监控信息进行可视化呈现。支持多种事件通知操作。
Service 端
引入依赖:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
编写 application.yml
配置:
spring:
security:
user:
# 登录账号
name: user
# 登录密码
password: 123456
server:
port: 8081
添加 @EnableAdminServer
注解:
@EnableAdminServer @SpringBootApplication public class SystemApplication { public static void main(String[] args) { SpringApplication.run(SystemApplication.class, args); } }
添加安全认证
因为是部署在公网中,所以增加权限账号登录验证。账号密码已经在 application.yml
中配置好了。还需要实现如下权限拦截。
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // 跨域设置,SpringBootAdmin客户端通过instances注册 http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers("/instances"); // 静态资源 http.authorizeRequests().antMatchers("/assets/**").permitAll(); // 所有请求必须通过认证 http.authorizeRequests().anyRequest().authenticated(); // 整合spring-boot-admin-server-ui http.formLogin().loginPage("/login").permitAll(); http.logout().logoutUrl("/logout").logoutSuccessUrl("/login"); // 启用basic认证 http.httpBasic(); } }
至此,Service 端 已完成配置,对应的访问地址:http://localhost:8081
配置 Client 端
引入依赖:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.1.0</version> </dependency>
编写 application.yml
配置:
spring:
application:
name: springbootadminclient
boot:
admin:
client:
# Spring Boot Admin 服务端地址
url: http://localhost:8081
username: user
password: 123456
instance:
prefer-ip: true
management:
endpoint:
health:
# 端点健康情况,默认值 "never",设置为 "always" 可以显示硬盘使用情况和线程情况
show-details: always
endpoints:
web:
exposure:
# 设置端点暴露的哪些内容,默认 ["health","info"],设置 "*" 代表暴露所有可访问的端点
include: "*"