溫馨提示×

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

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

Spring Boot實(shí)現(xiàn)自動(dòng)化配置的優(yōu)缺點(diǎn)有哪些

發(fā)布時(shí)間:2020-11-27 17:29:12 來源:億速云 閱讀:272 作者:Leah 欄目:編程語言

Spring Boot實(shí)現(xiàn)自動(dòng)化配置的優(yōu)缺點(diǎn)有哪些?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

Spring Boot中的雙刃劍:自動(dòng)化配置

Spring Boot的自動(dòng)化配置給我們所帶來的超便利的新開發(fā)方式。但是,在一些情況下Spring Boot的自動(dòng)化配置也會(huì)給我們?nèi)莵聿簧俚穆闊?,比如這些場(chǎng)景:

項(xiàng)目依賴復(fù)雜的情況下,由于依賴方的依賴組織不夠嚴(yán)格,可能引入了一些實(shí)際我們不需要的依賴,從而導(dǎo)致我們的項(xiàng)目滿足一些特定的自動(dòng)化配置。

傳統(tǒng)Spring項(xiàng)目轉(zhuǎn)換為Spring Boot項(xiàng)目的過程中,由于不同的組織方式問題,引發(fā)自動(dòng)化配置加載的錯(cuò)誤,比如:通過xml手工組織的多數(shù)據(jù)源配置等。

上面這些原因都會(huì)導(dǎo)致不必要的自動(dòng)化配置加載而導(dǎo)致應(yīng)用無法啟動(dòng)或觸發(fā)/health的健康檢查不通過等問題。比如,我們?cè)诟脑靷鹘y(tǒng)Spring項(xiàng)目到Spring Boot項(xiàng)目中碰到的一些錯(cuò)誤:

六月 21, 2017 6:23:47 下午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
警告: The web application [ROOT] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.lang.Object.wait(Native Method)
 java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
 com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43)
2017-06-21 18:23:47,230 INFO [main] org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer - 
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-06-21 18:23:47,237 ERROR [main] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter - 
***************************
APPLICATION FAILED TO START
***************************
Description:
Cannot determine embedded database driver class for database type NONE
Action:
If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active).

從報(bào)錯(cuò)信息中,我們就可以分析出錯(cuò)誤原因是觸發(fā)了數(shù)據(jù)源的自動(dòng)化配置,然而當(dāng)前項(xiàng)目其實(shí)并不需要數(shù)據(jù)源。查其根源是依賴方提供的API依賴中引用了一些多余的依賴觸發(fā)了該自動(dòng)化配置的加載。

如何解決

為了解決上面所述的問題,我們可以用兩種方法來解決:

  • 通過外部依賴的修改來解決:通過與依賴方溝通,在對(duì)方提供的API依賴中去掉不必要的依賴

  • 通過禁用指定的自動(dòng)化配置來避免加載不必要的自動(dòng)化配置,下面列舉了禁用的方法:

使用了@EnableAutoConfiguration的時(shí)候

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

使用了@SpringBootApplication的時(shí)候

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

使用了@SpringCloudApplication的時(shí)候

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@SpringCloudApplication

通過配置文件來設(shè)置

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

關(guān)于Spring Boot實(shí)現(xiàn)自動(dòng)化配置的優(yōu)缺點(diǎn)有哪些問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

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

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

AI