spring-boot集成spring-boot-admin实现监听服务

环境准备

<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

这样我们的服务一旦下线,收件人的邮箱会收到服务下线的通知

恭喜各位同行又学会了一招

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值