javascript
简单的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
總結
以上是生活随笔為你收集整理的简单的Spring Boot管理员设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 勃怎么组词组2个字 勃如何组词组2个字
- 下一篇: 金刚经不能念 金刚经为什么不能随便念