spring boot admin 自定义

自定义通知事件

  • 实现notifier接口
// 此接口在服务端
package de.codecentric.boot.admin.server.notify;
public interface Notifier {
    Mono<Void> notify(InstanceEvent var1);
}
复制代码
  • AbstractEventNotifier
  • AbstractStatusChangeNotifier

可以通过实现Notifier接口,或者继承AbstractEventNotifier或者AbstractStatusChangeNotifier来实现自定义通知事件。其集成关系如下图所示:

以下为自定义实现一个通知程序。

public class CustomNotifier  extends AbstractEventNotifier {
    private static final Logger LOGGER = LoggerFactory.getLogger(LoggingNotifier.class);

    public CustomNotifier(InstanceRepository repository) {
        super(repository);
    }

    @Override
    protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
        return Mono.fromRunnable(() -> {
            if (event instanceof InstanceStatusChangedEvent) {
                LOGGER.info("Instance {} ({}) is {}", instance.getRegistration().getName(), event.getInstance(),
                    ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
            } else {
                LOGGER.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(),
                    event.getType());
            }
        });
    }
}
复制代码

注入自定义的http请求头

如过想将自定义的http请求头信息注入到监控服务端,需要实现HttpHeadersProvider

package de.codecentric.boot.admin.server.web.client;
public interface HttpHeadersProvider {
    HttpHeaders getHeaders(Instance var1);
}
复制代码

自定义实现如下:

@Configuration
@EnableAutoConfiguration
@EnableAdminServer
@Import({SecurityPermitAllConfig.class, SecuritySecureConfig.class, NotifierConfig.class})
public class SpringBootAdminServletApplication {
    private static final Logger log = LoggerFactory.getLogger(SpringBootAdminServletApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminServletApplication.class, args);
    }

    // tag::customization-instance-exchange-filter-function[]
    @Bean
    public InstanceExchangeFilterFunction auditLog() {
        return (instance, request, next) -> next.exchange(request).doOnSubscribe(s -> {
            if (HttpMethod.DELETE.equals(request.method()) || HttpMethod.POST.equals(request.method())) {
                log.info("{} for {} on {}", request.method(), instance.getId(), request.url());
            }
        });
    }
    // end::customization-instance-exchange-filter-function[]

    @Bean
    public CustomNotifier customNotifier(InstanceRepository repository) {
        return new CustomNotifier(repository);
    }

    @Bean
    public CustomEndpoint customEndpoint() {
        return new CustomEndpoint();
    }

    // tag::customization-http-headers-providers[]
    @Bean
    public HttpHeadersProvider customHttpHeadersProvider() {
        return instance -> {
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.add("X-CUSTOM", "My Custom Value");
            return httpHeaders;
        };
    }
    // end::customization-http-headers-providers[]

}
复制代码

拦截请求和响应

可以通过实现InstanceExchangeFilterFunction接口来拦截和修改对受监视应用程序的执行器端点的请求和响应。这对于审核或添加一些额外的安全检查非常有用。

如上代码中的InstanceExchangeFilterFunction auditLog()

链接或者嵌入外部页面

只需要需改yml文件中的配置即可

# tag::自定义外部视图
spring:
  boot:
    admin:
      ui:
        external-views:
          - label: "?"
            url: http://codecentric.de
            order: 2000
# end::customization-external-views
复制代码

自定义视图

可以像ui添加自定义视图,但此视图必须为vue.js的组件。 JavaScript-Bundle和CSS-Stylesheet必须放在类路径上,/META-INF/spring-boot-admin-server-ui/extensions/{name}/以便服务器可以处理他们。spring-boot-admin-samples / spring-boot-admin-sample-custom-ui / [spring-boot-admin-sample-custom-ui]可以做为一个参考。

自定义扩展需要通过调用自身的SBA.use()方法注册,并需要公开一个install()函数,该函数在设置路由时由ui调用。该install()函数接收以下参数以注册视图或回调:

  • 引用{github-src} /spring-boot-admin-server-ui/src/main/frontend/viewRegistry.js [viewRegistry]的对象

  • 引用{github-src} /spring-boot-admin-server-ui/src/main/frontend/store.js [applicationStore]的对象

  • 引用全局Vue [Vue]的对象

  • 引用{github-src} /spring-boot-admin-server-ui/src/main/frontend/utils/axios.js [axios]的对象

如果将新的顶级路由添加到前端,则后端也必须知道它们。添加一个/META-INF/spring-boot-admin-server-ui/extensions/{name}/routes.txt包含所有新的顶层路线(每条线路一条路线)。

// 注册组件
SBA.use({
  install({viewRegistry}) {
    viewRegistry.addView({
      name: 'custom',  //<1>
      path: '/custom', //<2>
      component: custom, //<3>
      label: 'Custom', //<4>
      order: 1000, //<5>
    });
  }
});
复制代码
添加父级

如下是一个简单的父级视图,用来列出所有的注册的模块。

// spring-boot-admin-sample-custom-ui/src/custom.vue
<template>
  <pre v-text="stringify(applications, null, 4)"/>
</template>

<script>
export default {
  props: {
    applications: { //<1>
      type: Array,
      required: true
    }
  },
  methods: {
    stringify: JSON.stringify
  }
};
</script>
复制代码

注册组件如上,在index.js中,并添加路由信息,routes.txt中

/custom/**
复制代码
可视化自定义

以下是自定义可视化端点视图,

参考

blog.csdn.net/AnY11/artic…

github.com/codecentric…

转载于:https://juejin.im/post/5d37f1726fb9a07ec3742fc1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值