zoukankan      html  css  js  c++  java
  • Spring Boot Admin

    Spring Boot Admin 是一个管理和监控 Spring Boot 应用程序的开源软件,每个应用都认为是一个客户端,通过 HTTP 或者使用 Eureka 注册到 admin server 中进行展示,Spring Boot Admin UI 部分使用 Vue.js 将数据展示在前端。

    一、Spring Boot Admin 分为:

       服务端是一个监控后台用来汇总展示所有的监控信息

         客户端就是具体的应用

    1.server和client的模式

    (1)server端

      添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
          <groupId>de.codecentric</groupId>
          <artifactId>spring-boot-admin-starter-server</artifactId>
          <version>2.1.6</version>
    </dependency>

      配置

    server.port=8000
    spring.application.name=Admin Server

      启动类

    package com.example.management;
    
    import de.codecentric.boot.admin.server.config.EnableAdminServer;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @EnableAdminServer
    public class ManagementApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ManagementApplication.class, args);
        }
    }

    (2)client端

      添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.1.6</version>
    </dependency>

      配置

    server.port=8001
    spring.application.name=Admin Client
    
    spring.boot.admin.client.url=http://localhost:8000
    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always

      启动类

    package com.example.client;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ClientApplication.class, args);
        }
    }

    注:

      使用时需要先启动服务端,在启动客户端的时候打开 Actuator 的接口,并指向服务端的地址

    2.基于springcloud的模式 

    在server端加入@EnableDiscoveryClient注解,spring boot admin就会主动去拉取注册中心的注册服务列表,从而获取他们的服务动态信息

    注册中心使用Eureka

    (1)注册中心Center

      添加依赖

    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
          <version>2.1.3.RELEASE</version>
    </dependency>

      配置

    server.port=8761
    spring.application.name=Center
    
    eureka.client.register-with-eureka=false
    eureka.client.fetch-registry=false
    eureka.client.service-url.default-zone=http://localhost:8761/eureka/
    
    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always

      启动类,添加@EnableEurekaServer注解,开启Eureka Server

    package com.example.center;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @EnableEurekaServer
    @SpringBootApplication
    public class CenterApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(CenterApplication.class, args);
        }
    }

      启动,访问http://localhost:8761/

    还没有服务向注册中心注册服务

    (2)Admin server

      依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    <dependency>
         <groupId>de.codecentric</groupId>
         <artifactId>spring-boot-admin-starter-server</artifactId>
         <version>2.1.6</version>
    </dependency>
    
    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
         <version>2.1.3.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>

      配置

    server.port=8000
    spring.application.name=Admin Server
    
    eureka.instance.lease-renewal-interval-in-seconds=10
    eureka.instance.health-check-url-path=/actuator/health
    eureka.client.registry-fetch-interval-seconds=5
    eureka.client.service-url.default-zone=${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
    
    spring.thymeleaf.check-template-location=false

      启动类,添加@EnableDiscoveryClient注解,开启DiscoveryClient的功能

    package com.example.management;
    
    import de.codecentric.boot.admin.server.config.EnableAdminServer;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableAdminServer
    @EnableDiscoveryClient
    public class ManagementApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ManagementApplication.class, args);
        }
    }

    (2)Admin Client

      依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.1.6</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <version>2.1.3.RELEASE</version>
    </dependency>

      配置

    server.port=8001
    spring.application.name=Admin Client
    
    eureka.instance.lease-renewal-interval-in-seconds=10
    eureka.instance.health-check-url-path=/actuator/health
    eureka.client.registry-fetch-interval-seconds=5
    eureka.client.service-url.default-zone=${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
    
    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always

      启动类

    package com.example.client;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class ClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ClientApplication.class, args);
        }
    }

    依次启动服务Center,Admin Client,Admin Server

    http://localhost:8761/

    http://localhost:8000/

    注册到注册中心的服务都会被监控

     

    二、集成了登录模块

      登录界面默认集成到了spring security模块

      在Admin server里

      添加依赖

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-security</artifactId>
         <version>2.1.8.RELEASE</version>
    </dependency>

      添加配置

    spring.security.user.name=abc
    spring.security.user.password=abc123

      添加配置类

    package com.example.management.configure;
    
    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;
    
    @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");
            http.authorizeRequests()
                    .antMatchers(adminContextPath + "/assets/**").permitAll()
                    .antMatchers(adminContextPath + "/login").permitAll()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                    .logout().logoutUrl(adminContextPath + "/logout").and()
                    .httpBasic().and()
                    .csrf().disable();
        }
    }

    重新启动,http://localhost:8000,显示登录页面,输入配置的用户名密码

     

     三、监控邮件通知

      添加依赖

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-mail</artifactId>
         <version>2.1.8.RELEASE</version>
    </dependency>

      添加配置

    spring.mail.host=smtp.126.com
    spring.mail.username=YYYYYYY@126.com
    spring.mail.password=abcabc
    spring.mail.properties.mail.smtp.auth=true
    spring.mail.properties.mail.smtp.starttls.enable=true
    spring.mail.properties.mail.smtp.starttls.required=true
    # 发送给谁
    spring.boot.admin.notify.mail.to=XXXXXXX@qq.com
    # 是谁发送出去的
    spring.boot.admin.notify.mail.from=YYYYYYY@126.com
    spring.boot.admin.notify.mail.enabled=true

      配置完成后,重新启动,当服务上线下线的时候,指定的邮箱就可以收到邮件了

     说明:

      如果是下图,请添加配置

    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always

     监控的endpoint会都打开

  • 相关阅读:
    Sum Root to Leaf Numbers
    Sum Root to Leaf Numbers
    Sort Colors
    Partition List
    Binary Tree Inorder Traversal
    Binary Tree Postorder Traversal
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Search a 2D Matrix
    leetcode221
  • 原文地址:https://www.cnblogs.com/baby123/p/11580033.html
Copyright © 2011-2022 走看看