溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Springboot管理設(shè)置的示例分析

發(fā)布時(shí)間:2022-02-25 15:11:45 來源:億速云 閱讀:137 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Springboot管理設(shè)置的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

Spring Boot Admin 是一個(gè)很不錯(cuò)的儀表板,用于監(jiān)控您的 Spring Boot 應(yīng)用程序。然而,設(shè)置它并不是那么簡單。 

  • 在您的啟動(dòng)應(yīng)用程序中包含一個(gè)連接到管理應(yīng)用程序的客戶端庫——這需要將管理應(yīng)用程序部署在公共的某個(gè)地方或至少可以從您的應(yīng)用程序訪問,并讓您的應(yīng)用程序知道它正在被監(jiān)控。

  • 使用云發(fā)現(xiàn),這意味著您的應(yīng)用程序是服務(wù)發(fā)現(xiàn)基礎(chǔ)設(shè)施的一部分,例如使用微服務(wù)

對(duì)于更簡單的場(chǎng)景,例如在某些 IaaS 上運(yùn)行的單體應(yīng)用程序,以及將您的管理應(yīng)用程序部署在本地機(jī)器或某些本地公司基礎(chǔ)設(shè)施中,這兩種方案都不是很好的選擇。如果您還不需要云發(fā)現(xiàn),則它是一種矯枉過正的做法,并且包含客戶端庫會(huì)引入使應(yīng)用程序可訪問管理服務(wù)器的復(fù)雜性,反之亦然。此外,這種雙向依賴聽起來是錯(cuò)誤的。

幸運(yùn)的是,有一個(gè)未記錄但已實(shí)現(xiàn)的方法SimpleDiscoveryClient,讓您只需在任何機(jī)器上運(yùn)行帶有一些配置的 Spring Boot Admin,并將其連接到您的 Spring Boot 應(yīng)用程序。

第一個(gè)要求是在您的啟動(dòng)應(yīng)用程序中設(shè)置 spring boot actuator。Actuator 公開了管理應(yīng)用程序工作所需的所有端點(diǎn)。設(shè)置聽起來很簡單——您只需添加一堆依賴項(xiàng)并可能指定一些配置參數(shù),僅此而已。事實(shí)上,在實(shí)際應(yīng)用中,這并不容易——尤其是關(guān)于執(zhí)行器端點(diǎn)的基本身份驗(yàn)證。您需要一個(gè)單獨(dú)的 spring-security(除了現(xiàn)有的 spring-security 配置之外),以便僅將基本身份驗(yàn)證應(yīng)用于執(zhí)行器端點(diǎn)。例如:

@Configuration
@Order(99)// the default security configuration has order 100
public class ActuatorSecurityConfigurationextends WebSecurityConfigurerAdapter {
 
    @Value("${security.user.name}")
    private String username;
     
    @Value("${security.user.password}")
    private String password;
     
    @Override
    protected 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);
    }
}

這有點(diǎn)違反直覺,但它有效。不確定它是否是慣用的——使用 spring 安全和 spring 引導(dǎo),你永遠(yuǎn)不知道什么是慣用的。注意 - 據(jù)稱應(yīng)該可以將security.user.name(和 password)自動(dòng)包含在某個(gè)管理器中,但我沒有找到,所以我只是在內(nèi)存中實(shí)例化了一個(gè)。請(qǐng)注意/manage/**路徑——為了在該路徑下?lián)碛兴袌?zhí)行器端點(diǎn),您需要在應(yīng)用程序?qū)傩晕募兄付?code>management.context-path=/manage。

現(xiàn)在已經(jīng)設(shè)置了執(zhí)行器端點(diǎn),我們必須附加我們的 spring 管理應(yīng)用程序。它看起來像這樣:

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

通常,應(yīng)該將ApplicationEventPublisher消息注入并推送到那里,而不是直接調(diào)用偵聽器,如上所示。我沒有設(shè)法讓它輕松工作,所以我解決了這個(gè)問題。

提到的 application.properties 文件應(yīng)該在 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由自動(dòng)配置實(shí)例化的 。實(shí)際上,該客戶端直到最新版本才工作——它拋出 NullPointerException 因?yàn)樵獢?shù)據(jù)(處理用戶名和密碼)始終為空。在 1.2.2 的 cloud-commons 中,他們修復(fù)了它:

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

簡單的發(fā)現(xiàn)客戶端就是這樣——您指定啟動(dòng)應(yīng)用程序的 URL,它會(huì)定期從執(zhí)行器端點(diǎn)獲取數(shù)據(jù)。為什么沒有記錄在案,為什么它直到最近才真正起作用——我不知道。另外,我不知道為什么您必須手動(dòng)發(fā)送觸發(fā)發(fā)現(xiàn)的事件。也許它不是慣用的,但它不會(huì)自動(dòng)發(fā)生,這使它起作用。

像往常一樣,“正常工作”和“簡單設(shè)置”的東西——從來都不是那樣的。如果你有比 hello world 稍微復(fù)雜一點(diǎn)的東西,你必須挖掘一些晦澀的類并“off-road”。幸運(yùn)的是,在這種情況下,它確實(shí)有效,而不是需要不好的解決方法。

感謝各位的閱讀!關(guān)于“Springboot管理設(shè)置的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI