2016-11-15 149 views
0

我使用自動配置其自己的RabbitMQ客戶端的公司Spring Boot擴展。這個擴展(起動器)取代了Spring Boot RabbitAutoConfiguration。SpringBoot在啓動時定義的多個自動配置排除項

我知道有很多方法來禁用RabbitAutoConfiguration:

  • 與@EnableAutoConfiguration每個應用(主)類(不包括= RabbitAutoConfiguration.class)或@SpringBootApplication(排除= RabbitAutoConfiguration.class)
  • 在application.properties或YML文件(外在或罐子內),與spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration

我不知道是否有一種方式,我的新起動器存在禁用Spring Boot RabbitAutoConfiguration。

我嘗試了一些骯髒的東西,例如在公司啓動模塊中放置一個application.properties與exclude屬性,但由於Spring Boot只在類路徑中讀取一個,所以它可以很容易地被客戶端應用程序中的一個覆蓋。我不想強加一些限制。

我不喜歡每個應用程序添加相同的排除方式(屬性或註釋)的想法。

任何想法?

編輯

我需要在同一應用中配置多個RabbitMQ的ConnectionFactoryRestTemplate

+1

如果您手動配置兔子,自動配置將自動退出...無需排除它。 –

+0

@ M.Deinum這不是我得到的行爲,因爲配置中有兩個RabbitTemplate。 RabbitAutoConfiguration不適用於多個。 –

+0

配置上有很多'@CnditionalOnMissingBean'註釋。所以如果你已經添加了一個'RabbitTemplate'和'Connection',配置不應該做任何事情。 –

回答

2

如果您想要真正替代標準RabbitAutoConfiguration,您只需在自己的自動配置上添加@AutoconfigureBefore(RabbitAutoConfiguration.class),以教授Spring Boot在標準之前處理您的標準。

如果它是替代品,您將註冊標準自動配置將檢測到的bean,並且它將以與您手動定義它們相同的方式註銷。

話雖如此,你爲什麼這樣做呢?我寧願補充現有的自動配置,而不是取代標準的。標準配置有問題嗎?如果是這樣,我們很樂意聽到它,並修改代碼,以便您不必完全替代它。

+0

不管條件如何,配置仍然需要一個'ConnectionFactory',因爲你顯然有多個失敗。您可以將其中一個標記爲'@ Primary'來解決該問題。 –

+0

@M。Deinum:你是對的 - 當有可能註釋一個'ConnectionFactory'_的@Bean聲明時。問題在於連接工廠在啓動時由自制的BeanDefinitionRegistryPostProcessor(BDRPP)進行動態註冊:在Spring Config中爲應用程序所需的每個RestTemplate聲明瞭一個BDRPP實例。註冊bean時,不能動態定義'@ Primary'註釋。然而,解決這個問題的最簡單方法是在我自己的自動配置器中完全禁用「RabbitAutoConfiguration」的明確指令。 –

+0

您可以告訴BeanDefinition它是否是主要的......因此,您可以將第一個標記爲主要標記。 –

相關問題