栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot Admin2,看完直接怼产品经理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot Admin2,看完直接怼产品经理

整体工程修改自 SBA 开源项目的 example 工程,具体使用 custom-ui 的工程链接为:[spring-boot-admin-sample-custom-ui]_,_红色框的部分是 arthas web console 的全部静态文件,通过 Maven Resource 的指定配置打入指定目录,实现 SBA 启动时的自定义加载。maven resource 配置–下:

static

${project.build.directory}/classes/meta-INF/spring-boot-admin-server-ui/extensions/arthas

false

最终构建的 jar 中 meta-INFO 中包含相关的文件即可在 SBA 自带的 tomcat 启动后加载到相关的静态资源,最后的 url 和自定义实现的 arthas console 配置的外部 URL 对应即可。

2. 外部链接配置


SBA 2.0 开始已经使用 vue 全家桶了,扩展集成均比较方便。其中,官方文档给出了外嵌连接的配置方式:[linking / Embedding External Pages]

参考 sba example 工程的 application.yml 配置即可:

tag::customization-external-views[]

spring:

boot:

admin:

ui:

external-views:

  • label: “Arthas Console”

url: http://21.129.49.153:8080/

order: 1900

end::customization-external-views[]

3. 对应 Spring MVC controller 实现


参考引用原实现的 SBA 集成部分,该部分主要修改实现如下功能:

  • 实现 tunnel server 已经加载实例列表的刷新并展示到前段 AgentID 框供选择点击链接。

  • 实现自定义 IP 地址的刷新(解决生产环境双生产 IP 和运维段 IP 不一致的问题)。

4. Arthas Spring Boot 插件修改和配置


参考引用原实现的 SBA 集成中插件修改以及客户端配置 application.yml。

对原版 Spring boot 插件修改主要在于原有插件是通过 Spring的@ConditionalOnMissingBean 实现自动加载。

修改主要是通过修改这部分实现通过配置文件默认不启动,然后使用时通过远程启动相关 agent 线程。

5. 基于 Spring Actuator 的 JMX 实现


SBA client 在 maven 引入中会默认引入 jolokia-core.jar,如果没有因为 SBA client 依赖可以自行引入该包,可以实现通过 actuator 开放基于 http 的 jmx 操作能力和 SBA 控制台的相关功能无缝配合。

application.yml 中开放 management 相关配置,根据自身环境情况,也可以开在客户端侧开启 Spring security 认证,SBA 也可以很好的支持通过服务发现实现密码保护 actuator 端点的访问。

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

#放开management

management:

endpoints:

web:

exposure:

这里用* 代表暴露所有端点只是为了观察效果,实际中按照需进行端点暴露

include: “*”

exclude: env

endpoint:

health:

详细信息显示给所有用户。

show-details: ALWAYS

health:

status:

http-mapping:

自定义健康检查返回状态码对应的 http 状态码

FATAL: 503

JMX 实现参考原文中 EnvironmentChangeListener 的实现思路,基于 Spring 的 JMX 注解实现即可。

@Component

@ManagedResource(objectName = “com.ArthasAgentManageMbean:name=ArthasMbean”, description = “Arthas远程管理Mbean”)

public class ArthasMbeanImpl {

@Autowired

private Map arthasConfigMap;

@Autowired

private ArthasProperties arthasProperties;

@Autowired

private ApplicationContext applicationContext;

private ArthasAgent arthasAgentInit() {

arthasConfigMap = StringUtils.removeDashKey(arthasConfigMap);

// 给配置全加上前缀

Map mapWithPrefix = new HashMap(arthasConfigMap.size());

for (Map.Entry entry : arthasConfigMap.entrySet()) {

mapWithPrefix.put(“arthas.” + entry.getKey(), entry.getValue());

}

final ArthasAgent arthasAgent = new ArthasAgent(mapWithPrefix, arthasProperties.getHome(),

arthasProperties.isSlientInit(), null);

arthasAgent.init();

return arthasAgent;

}

@ManagedOperation(description = “获取配置Arthas Tunnel Server地址”)

public String getArthasTunnelServerUrl() {

return arthasProperties.getTunnelServer();

}

@ManagedOperation(description = “设置Arthas Tunnel Server地址,重新attach后生效”)

@ManagedOperationParameter(name = “tunnelServer”, description = “example:ws://127.0.0.1:7777/ws”)

public Boolean setArthasTunnelServerUrl(String tunnelServer) {

if (tunnelServer == null || tunnelServer.trim().equals("") || tunnelServer.indexOf(“ws://”) < 0) {

return false;

}

arthasProperties.setTunnelServer(tunnelServer);

return true;

}

@ManagedOperation(description = “获取AgentID”)

public String getAgentId() {

return arthasProperties.getAgentId();

}

@ManagedOperation(description = “获取应用名称”)

public String getAppName() {

return arthasProperties.getAppName();

}

@ManagedOperation(description = “获取ArthasConfigMap”)

public HashMap getArthasConfigMap() {

return (HashMap) arthasConfigMap;

}

@ManagedOperation(description = “返回是否已经加载Arthas agent”)

public Boolean isArthasAttched() {

DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();

String bean = “arthasAgent”;

if (defaultListableBeanFactory.containsBean(bean)) {

return true;

}

return false;

}

@ManagedOperation(description = “启动Arthas agent”)

public Boolean startArthasAgent() {

DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/693099.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号