简单的Spring Boot管理员设置

Spring Boot Admin是一个不错的仪表板,用于监视您的Spring Boot应用程序。 但是,设置它并不是一件容易的事。 该文档概述了两个选项 :

  • 在连接到admin应用程序的启动应用程序中包括一个客户端库–这要求将admin应用程序部署在公共位置或至少可以从您的应用程序访问的地方,并且还需要使您的应用程序知道它正在受到监视。
  • 使用云发现,这意味着您的应用程序是服务发现基础结构的一部分,例如使用微服务

对于更简单的方案(例如在某些IaaS上运行的整体应用程序以及将您的管理应用程序部署在本地计算机或某些本地公司基础结构中),这两者都不是很好的选择。 如果您不需要云发现,那就太过头了,并且包括一个客户端库会引入使应用程序可以访问管理服务器的复杂性,反之亦然。 而且,这种双向依赖听起来是错误的。

幸运的是,有一个未记录但已实现的SimpleDiscoveryClient ,使您可以在任何计算机上简单地运行带有某些配置的Spring Boot Admin并将其连接到Spring Boot应用程序。

首先要求是在引导应用程序中设置弹簧引导执行器 。 执行器公开了管理应用程序运行所需的所有端点。 设置听起来很简单–您只需添加一堆依赖项并可能指定一些配置参数即可。 实际上,在实际应用中并不是那么容易–尤其是关于执行器端点的基本认证。 为了将基本身份验证仅应用于执行器端点,您需要一个单独的spring-security(除了现有的spring-security配置之外)。 例如:

@Configuration
@Order(99) // the default security configuration has order 100
public class ActuatorSecurityConfiguration extends WebSecurityConfigurerAdapter {@Value("${security.user.name}")private String username;@Value("${security.user.password}")private String password;@Overrideprotected void configure(HttpSecurity http) throws Exception {InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(User.withUsername(username).password(password).roles("ACTUATOR","ADMIN").build());http.antMatcher("/manage/**").authorizeRequests().anyRequest().hasRole("ACTUATOR").and().httpBasic().and().userDetailsService(manager);}
}

这有点违反直觉,但是可以。 不知道这是否是惯用的-借助弹簧安全性和弹簧靴,您永远都不知道什么是惯用的。 注意–据称应该可以在某些管理器中自动包含security.user.name (和密码),但是我找不到它,因此我只实例化了一个内存中的实例。 注意/manage/**路径–为了使所有执行器端点都在该路径下,您需要在应用程序属性文件中指定management.context-path=/manage

现在已经设置了执行器端点,我们必须附加我们的spring admin应用程序。 看起来像这样:

@Configuration
@EnableAutoConfiguration
@PropertySource("classpath:/application.properties")
@EnableAdminServer
public class BootAdminApplication {public static void main(String[] args) {SpringApplication.run(BootAdminApplication.class, args);}@Autowiredprivate ApplicationDiscoveryListener listener;@PostConstructpublic void init() {// we have to fire this event in order to trigger the service registrationInstanceRegisteredEvent<?> event = new InstanceRegisteredEvent<>("prod", null);// for some reason publising doesn't work, so we invoke directlylistener.onInstanceRegistered(event);}
}

通常,应该注入ApplicationEventPublisher并将消息推送到此处,而不是直接调用侦听器,如上所示。 我没有设法使其轻松工作,所以我解决了这个问题。

提到的application.properties文件应该位于src / main / resources中,如下所示:

spring.cloud.discovery.client.simple.instances.prod[0].uri=https://your-spring-boot-application-url.com
spring.cloud.discovery.client.simple.instances.prod[0].metadata.user.name=<basic-auth-username>
spring.cloud.discovery.client.simple.instances.prod[0].metadata.user.password=<basic-auth-password>
spring.boot.admin.discovery.converter.management-context-path=/manage
spring.boot.admin.discovery.services=*

那是在做什么 它使用由自动配置实例化的SimpleDiscoveryClient 。 实际上,该客户端直到最新版本都无法使用–抛出NullPointerException,因为元数据(处理用户名和密码)始终为空。 在1.2.2版的云中,他们修复了该问题:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-commons</artifactId><version>1.2.2.RELEASE</version>
</dependency>

简单发现客户端就是这样-您指定启动应用程序的URL,它会定期从执行器端点获取数据。 为什么没有记录下来,为什么直到最近才真正起作用?我不知道。 另外,我不知道您为什么必须手动发送触发发现的事件。 也许这不是惯用语言,但是它不会自动发生,因此可以正常工作。

像往常一样,“工作正常”并且具有“简单的设置” –从来没有像现在这样。 如果您有比问候世界稍微复杂的东西,则必须挖一些晦涩难懂的课程并“越野”。 幸运的是,在这种情况下,它确实有效,而不是所需的丑陋解决方法。

翻译自: https://www.javacodegeeks.com/2017/07/simple-spring-boot-admin-setup.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NOIP模拟测试19「count·dinner·chess」

反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍然认为不可实现 0分 所以T1是什么样的难题呢 即使暴力也有60分,但我楞没想出来暴力怎么打…

react组件卸载调用的方法_好程序员web前端培训分享React学习笔记(三)

好程序员web前端培训分享React学习笔记(三)&#xff0c;组件的生命周期React中组件也有生命周期&#xff0c;也就是说也有很多钩子函数供我们使用, 组件的生命周期&#xff0c;我们会分为四个阶段&#xff0c;初始化、运行中、销毁、错误处理(16.3之后)初始化在组件初始化阶段会…

静态工厂方法代替构造器实例_静态工厂方法与传统构造方法

静态工厂方法代替构造器实例之前&#xff0c;我已经讨论过一些关于Builder模式的信息 &#xff0c; Builder Pattern是一种有用的模式&#xff0c;用于实例化具有几个&#xff08;可能是可选的&#xff09;属性的类&#xff0c;这些属性可以使读取&#xff0c;编写和维护客户端…

NOIP模拟测试21「折纸·不等式」

折纸 题解 考试时无限接近正解&#xff0c;然而最终也只是接近而已了 考虑模拟会爆炸&#xff0c;拿手折纸条试一试&#xff0c;很简单 考你动手能力 代码 #include<bits/stdc.h> using namespace std; #define ll long long #define A 3100000 ll cj[A],questions[A]; l…

小孔成像总结_科学实践小孔成像

科学实践小孔成像-徐征浩、周永锋耳闻之不如目见之&#xff0c;目见之不如足践之。行是知之始&#xff0c;知是行之成。聪明不仅仅是理论上&#xff0c;它还体现在实践等方面。国庆期间&#xff0c;同学们运用物理课堂上所学的知识制作了小孔成像和土电话这些常见的物理仪器&am…

休眠架构概述

下图提供了Hibernate体系结构的高级视图&#xff1a; 最小的架构 “最小”架构使应用程序可以管理自己的JDBC连接&#xff0c;并提供与Hibernate的连接。 另外&#xff0c;应用程序自行管理交易。 这种方法使用了最少的Hibernate API子集。 综合架构 Hibernate Basic API 这里…

ASP.NET Core MVC 之过滤器(Filter)

ASP.NET MVC 中的过滤器允许在执行管道中的特定阶段之前或之后运行代码。可以对全局&#xff0c;也可以对每个控制器或每个操作配置过滤器。 1.过滤器如何工作 不同的过滤器类型在管道中的不同阶段执行&#xff0c;因此具有各自的与其场景。根据需要执行的任务以及需要执行的请…

.sh文件是什么语言_FastDFS分布式文件系统的搭建安装

FastDFS很久之前&#xff0c;对上传的文件可能是存储在数据库&#xff0c;在数据库中存储路径&#xff0c;保存文件的二进制数据&#xff0c;随着用户上传的文件增加&#xff0c;数据库数据越来越多。这时&#xff0c;可以使用分布式文件系统&#xff0c;将用户上传的文件例如图…

ASP.NET Core MVC 之依赖注入 View

ASP.NET Core 支持在试图中使用依赖注入。这将有助于提供视图专用的服务&#xff0c;比如本地化或者仅用于填充视图元素的数据。应尽量保持控制器和视图之间的关注点分离。视图所显示的大部分数据应该从控制器传入。 使用 inject 指令将服务注入到视图&#xff0c;语法 inject …

matlab全安装多大_不理会其他,我只中意T20天正V2.0软件,激活安装教程在这里...

大家好&#xff0c;我是本文的小编 软妹&#xff0c;前几篇为大家分享了Proe系列软件的安装步骤&#xff0c;在设计三维设计领域Pro/E是现今主流的CAD/CAM/CAE软件一款软件&#xff0c;特别是在国内产品设计领域占据重要位置。在数控加工编程软件领域&#xff0c;哪款软件才是王…

couchbase_Couchbase 2.0归类视图简介

couchbase大多数应用程序必须处理“主/详细”类型的数据&#xff1a; 啤酒厂和啤酒 部门和员工 发票和项目 … 例如&#xff0c;创建如下所示的应用程序视图是必需的&#xff1a; 借助Couchbase和许多面向文档的数据库&#xff0c;您可以使用不同的方式来处理此问题&…

NOIP模拟测试20「周·任·飞」

liu_runda出的题再次$\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%$ 任 题解 题目中为什么反复强调简单路径,没有环 没有环的图中点数-边数联通块数 前缀和维护边的前缀和,和点的前缀和, 在维护边的前缀和不好维护转化为横着边前缀和,竖着边前缀和 注意边的边界问题 看边如何维护 就拿…

如何脚踏实地构建Java Agent

在构建Plumbr的多年中&#xff0c;我们遇到了许多具有挑战性的问题。 在其他方面&#xff0c;使Plumbr Java Agent可靠地执行而又不危害客户的应用程序&#xff0c;是一个特别棘手的任务。 从实时系统中安全地收集所有需要的遥测会带来很多问题。 其中一些非常简单&#xff0c;…

ASP.NET Core MVC 之依赖注入 Controller

ASP.NET Core MVC 控制器应通过构造函数明确地请求它们地依赖关系&#xff0c;在某些情况下&#xff0c;单个控制器地操作可能需要一个服务&#xff0c;在控制器级别上的请求可能没有意义。在这种情况下&#xff0c;也可以将服务作为 Action 的参数。 依赖注入是一种如 Depend…

16g内存 32g内存游戏区别_电脑内存8G和16G的差别大吗?打游戏需要多大内存?

Hello大家好&#xff0c;我是兼容机之家的小牛。电脑内存是除了CPU之外最重要的元件之一&#xff0c;电脑内存的多少直接影响着运行大型软件、多任务时电脑的流畅程度&#xff0c;很多玩家在第一次购买电脑的时候并不知道应该购买内存多大的电脑&#xff0c;今天小牛就来和大家…

用友U9执行JS代码。

UFSoft.UBF.UI.AtlasHelper.RegisterAtlasStartupScript(part.Page, part.Page.GetType(), "JavaScriptExecQueue", "alert(地球即将毁灭&#xff0c;进入倒计时&#xff1a;5&#xff0c;4&#xff0c;3&#xff0c;2&#xff0c;1…嘣&#xff01;嘣&#xff…

java培训学费_北京Java培训班学费很贵吗,包含了哪些收费项目

北京的Java培训班有很多&#xff0c;价格却是相差不多的&#xff0c;但培训的课程就参差不齐了&#xff0c;有的培训班就是为了赚钱而存在的&#xff0c;想要系统的学习Java&#xff0c;确保学习效果&#xff0c;那么你一定要挑选正规的Java培训班&#xff0c;挑选适合自己的Ja…

typora.io使用教程

引言&#xff1a;对于开发人员大部分都接触过.md文件&#xff0c;而typora.io就是专门编辑.md文件的工具&#xff0c;该工具对于编写接口文档特别方便&#xff0c;它提供了word类似的大纲视图&#xff0c;同时也提供了很多的功能&#xff0c;但是改软件本身却非常的小&#xff…

c#编译时提高兼容性_幻像类型提高了编译时的安全性

c#编译时提高兼容性介绍 使用幻像类型是一种非常简单的技术&#xff0c;可用于提高代码的编译时安全性。 有很多潜在的用例&#xff0c;其复杂性程度各不相同&#xff0c;但是即使幻像类型的轻量级使用也可以显着提高编译时的安全性。 幻像类型只是带有未使用类型参数的参数化类…