spring-boot-actuator 模块虽然为 Spring-Boot 项目提供了监控及管理的 API ,但是并没有提供对应的 UI 管理系统,此时我们可以使用开源的 Spring-Boot-Amin 来为我们的 Spring-Boot 项目提供一个可视化的管理页面
创建项目
首先在创建一个简单的 Spring-Boot 项目,可以选择在 start.spring.io 中创建,然后导入
在项目顶级 pom.xml 定义 spring-boot-admin 的依赖版本
1 | <properties> |
创建 client 模块
在项目中创建一个用于与 spring-boot-admin 集成的演示模块 client
引入以下依赖
1 | <dependencies> |
创建启动类
1 |
|
此时可以通过启动 main 方法查看启动是否正常
创建 server 模块
在项目中创建 spring-boot-admin 服务模块 server
引入如下依赖
1 | <dependencies> |
创建启动类
1 |
|
创建配置文件 application.yml
1 | server: |
访问 localhost:8090 即可进入 spring-boot-admin 管理页面,但是此时还没有项目与它进行集成,所以应用数为 0
集成 Spring-Boot-Admin 服务
在演示模块 client 中添加配置文件 application.yml
1 | spring: |
再重启 client项目,此时 client 项目会向 http://localhost:8090 注册自己的服务信息
刷新 localhost:8090 页面,可发现 client 已经注册成功,此时可以查看 client 相关信息
高级配置
修改注册的服务地址
在默认配置中使用 InetAddress.getLocalHost().getCanonicalHostName() 获取服务地址,本地环境一般没有问题,但是在生产环境中可能获取的是本机内网IP,导致spring-boot-admin 无法访问注册的服务,所以需要更改注册时的服务地址,配置方式如下
1 | spring: |
安全配置
server 端安全配置
使用spring-security实现登录验证
首先引入依赖
1 | <dependency> |
创建spring-security 配置类
1 |
|
在application.yml配置默认帐号,密码
1 | spring: |
如果帐号密码是保存在数据库中,配置方式请查看该博客 使用数据库进行身份认证
重启 server 模块,此次刷新 localhost:8090 ,会重定向到登录页面,输入配置的默认帐号,密码即可登录
但是因为 server 端配置了登录验证,所以导致客户端无法注册,此时需要在 client 配置登录 server 所需的帐号与密码
配置方式如下
1 | spring: |
client 端安全配置
client 端主要是保护 management 中开放的 web 端点
首先引入依赖
1 | <dependency> |
创建spring-security 配置类
1 |
|
在application.yml配置默认帐号,密码
1 | spring: |
同时为了允许 server 访问 client 的 web 端点,我们在注册时需要提供 client 的帐号与密码
1 | spring: |
端点配置
在演示项目中,我们选择了开放所有端口,为了安全起见,我们应该只开放需要的端口
其中各个端点的作用请看官网文档 Spring-Boot 端点
1 | management: |
配置日志文件实时查看
如果想在 server 查看 client 当前写入的日志文件内容,只需在 client 的配置文件中配置 logging.path或logging.file 属性即可,此时 server 会存在一个 Logfile 的标签,点击该标签即可查看
配置邮件通知
首先在server引入依赖
1 | <dependency> |
邮箱发送相关配置
1 | spring: |
server 发送邮件配置
1 | spring: |
此时重启 server 端,然后停止 client 端,检查收件箱,可以发现已经接收到下线通知(接受邮件可能存在延迟)
重构
在上面的示例中,已经演示了一些基本的配置,而在实际开发中,一般情况下是一个 server 对应多个 client,多个 client 之间注册 server 的配置应该是一样的,此时我们可以选择将一些通用的配置抽取出来,以达到复用的效果
创建 commons 模块
在 resources 下创建 config 文件夹,用于存放通用的配置文件
创建通用邮箱配置文件 application-commons-mail.yml
1 | spring: |
创建 client 端默认用户配置文件 application-commons-spring-boot-admin-client-user.yml
1 | spring: |
创建 server 端用户及 url 配置文件 application-commons-spring-boot-admin-server.yml
1 | spring-boot-admin: |
创建 client 集成 spring-boot-admin 的通用配置文件 application-commons-spring-boot-admin-client.yml
1 | spring: |
将 client 端的 spring-security 配置类 SpringSecurityConfig 迁移到 commons 模块
在 client 端的启动类 ClientApplication 上添加一个注解配置 @ImportAutoConfiguration(SpringSecurityConfig.class) 表示应用这个配置类
修改 client 的配置文件 application.yml 为
1 | spring: |
修改 server 的配置文件 application.yml 为
1 | server: |