我有兩個小應用程序,一個使用spring-boot-starter-amqp
,其他使用spring-data-hadoop-boot
。我可以單獨運行它們,沒有任何問題。春季啓動AMQP和Spring Hadoop一起結束時丟失了EmbeddedServletContainerFactory bean
當我將它們結合在一起時,應用程序啓動失敗,出現異常:org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
。
我的主類是非常通用的,它分開他們倆工作得很好:
@PropertySource("file:conf/app.properties")
@SpringBootApplication
public class Job {
public static void main(String[] args) throws Exception {
SpringApplication.run(Job.class, args);
}
}
我在這裏丟失。 AFAIK @SpringBootApplication
包含所有需要的註釋,包括自動配置和組件掃描。我沒有必要配置網絡環境,因爲我沒有使用它。爲什麼當兩個依賴關係都在類路徑中時需要執行此操作,以及如何解決這個問題?
UPDATE
我挖在春節引導代碼一點點。主要問題是SpringApplication.deduceWebEnvironment()
根據類路徑中某些類的存在自動檢測應配置什麼類型的環境。
對於Web環境,正在檢查兩個類。當他們都在班級路徑中時,檢測到的網絡環境顯然需要適當的配置。
javax.servlet.Servlet
org.springframework.web.context.ConfigurableWebApplicationContext
spring-boot-starter-amqp:1.3.1.RELEASE
包含ConfigurableWebApplicationContext
,和spring-data-hadoop-boot:2.3.0.RELEASE-cdh5
包含Servlet
(在天然Hadoop的庫)。
現在,單獨運行時,上述兩個類中的一個在兩種情況下都會丟失,從而導致Web環境未設置。
但是,當我使用他們兩個 - 兩個類都可以找到。 Web環境被檢測到,誤報,並且它需要配置,我不能(也不想)提供配置。
所以現在問題是 - 我可以強制非web環境,即使當我在班級路徑中有這些類時?或者還有其他方法可以解決這個問題嗎? (除了將它們從Gradle依賴關係中排除)
您使用哪種Spring Boot版本?爲什麼使用自定義屬性文件,您可以簡單地將屬性添加到默認的'application.properties'。我懷疑其中一個依賴關係牽扯到一些web相關的東西(可能是hadoop),這會觸發一些自動配置類。如果你真的不需要它,你可以在'SpringApplication'上設置'web'屬性爲false。 –
我特意移動了屬性 - 這不會改變任何內容。但是你對自動配置是正確的。 – waste