环境准备
<spring-boot.version>2.6.13</spring-boot.version>
<spring-boot-admin.version>2.6.8</spring-boot-admin.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>
在cloud中创建spring-boot项目名为sba-admin添加jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
然后将boot-admin的pom.xml文件中的一些信息移动到父项目中
<spring-boot-admin.version>2.6.8</spring-boot-admin.version>
#在dependencyManagement增加
<dependencys>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-dependencies</artifactId>
<version>${spring-boot-admin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencys>
boot-admin的yml中添加配置
management:
endpoint:
health:
show-details: always
endpoints:
jmx:
exposure:
include: '*'
web:
exposure:
include: '*'
server:
port: 886
之后启动项目访问页面ip:prot
spring-boot-admin默认是没有登陆用户名和密码,不安全
可以通过spring-security来实现登录
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
在sba-admin中去重写spring-security的一些方法声名需要走boot-admin的登录页面
import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
/*
*
*
*/
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 登录成功处理类
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
http.authorizeRequests()
//静态文件允许访问
.antMatchers(adminContextPath + "/assets/**").permitAll()
//登录页面允许访问
.antMatchers(adminContextPath + "/login","/css/**","/js/**","/image/*").permitAll()
//其他所有请求需要登录
.anyRequest().authenticated()
.and()
//登录页面配置,用于替换security默认页面
.formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
//登出页面配置,用于替换security默认页面
.logout().logoutUrl(adminContextPath + "/logout").and()
.httpBasic().and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringAntMatchers(
"/instances",
"/actuator/**"
);
}
}
在yml文件中添加spring-security的登录名和密码
spring:
security:
user:
password: 123456
name: admin
再次访问boot-admin
我们是要去监听其他服务,可以通过nacos去获取别的服务信息,那就需要在boot-admin的yml文件中添加
spring:
cloud:
nacos:
discovery:
namespace: public
password: nacos
server-addr: localhost:8848
username: nacos
metadata:
'management.context-path': /sadmin/actuator
还需要在我们的其他服务将自己作为客服端注册到boot-admin中,在父项目中添加
<!-- 将服务推送到spring-boot-admin上-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在需要监听服务的yml配置文件中添加
management:
endpoints:
web:
exposure:
include: "*"
health:
sensitive: false
endpoint:
health:
show-details: ALWAYS #显示详细信息
这样我们在boot-admin的服务页面上就可以看到有两个实例,我们的boot-admin就可以监听到nacos上的服务了
我们还可以在boot-admin中查看我们项目的实时日志
logging:
level:
com:
baomidou:
mybatisplus: debug
xc: debug #com.xc为启动类的包路径
file:
path: D:\\project-logs\\bgyp-produce.log #日志打印的位置
这样就可以将项目的实时日志记录在本地作为持久化文件进行访问
这样的配置是无法记录mybatis-plus的sql打印需要将mybatis-plus的打印改为slf4j
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
就可以在日志中打印sql
boot-admin 页面其他具体的功能在下面链接
https://mp.weixin.qq.com/s/V0IQIEA81cxk2DfEs1Ul9A
当然我们还可以实现boot-admin监听到有服务下线实现邮箱发送信息
首先在我们的boot-admin项目中添加依赖
<!--邮箱工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
配置我们的邮箱信息即可
spring:
mail:
host: smtp.qq.com
username: aaa@qq.com #邮箱账号
password: qq邮箱的授权码
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
boot:
admin:
notify:
mail:
# 发送给谁
to: bbb@163.com #收件人的邮箱
# 是谁发送出去的
from: aaa@qq.com