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: |