网站做多久流量,网络服务器品牌排名,wordpress网站的优化,百度推广手机网站Spring Boot Admin是一个不错的仪表板#xff0c;用于监视您的Spring Boot应用程序。 但是#xff0c;设置它并不是一件容易的事。 该文档概述了两个选项 #xff1a; 在连接到admin应用程序的启动应用程序中包括一个客户端库–这要求将admin应用程序部署在公共位置或至少可… 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 doesnt work, so we invoke directlylistener.onInstanceRegistered(event);}
} 通常应该注入ApplicationEventPublisher并将消息推送到此处而不是直接调用侦听器如上所示。 我没有设法使其轻松工作所以我解决了这个问题。 提到的application.properties文件应该位于src / main / resources中如下所示 spring.cloud.discovery.client.simple.instances.prod[0].urihttps://your-spring-boot-application-url.com
spring.cloud.discovery.client.simple.instances.prod[0].metadata.user.namebasic-auth-username
spring.cloud.discovery.client.simple.instances.prod[0].metadata.user.passwordbasic-auth-password
spring.boot.admin.discovery.converter.management-context-path/manage
spring.boot.admin.discovery.services* 那是在做什么 它使用由自动配置实例化的SimpleDiscoveryClient 。 实际上该客户端直到最新版本都无法使用–抛出NullPointerException因为元数据处理用户名和密码始终为空。 在1.2.2版的云中他们修复了该问题 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-commons/artifactIdversion1.2.2.RELEASE/version
/dependency 简单发现客户端就是这样-您指定启动应用程序的URL它会定期从执行器端点获取数据。 为什么没有记录下来为什么直到最近才真正起作用我不知道。 另外我不知道您为什么必须手动发送触发发现的事件。 也许这不是惯用语言但是它不会自动发生因此可以正常工作。 像往常一样“工作正常”并且具有“简单的设置” –从来没有像现在这样。 如果您有比问候世界稍微复杂的东西则必须挖一些晦涩难懂的课程并“越野”。 幸运的是在这种情况下它确实有效而不是所需的丑陋解决方法。 翻译自: https://www.javacodegeeks.com/2017/07/simple-spring-boot-admin-setup.html