Spring Boot中自動(dòng)化配置的利弊以及解決方法
本文主要給大家介紹了關(guān)于Spring Boot自動(dòng)化配置的利弊及解決方法的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹:
Spring Boot中的雙刃劍:自動(dòng)化配置
在之前的文章中,我們通過(guò)各種功能性示例體驗(yàn)了Spring Boot的自動(dòng)化配置給我們所帶來(lái)的超便利的新開發(fā)方式。但是,在一些情況下Spring Boot的自動(dòng)化配置也會(huì)給我們?nèi)莵?lá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)目的過(guò)程中,由于不同的組織方式問(wèn)題,引發(fā)自動(dòng)化配置加載的錯(cuò)誤,比如:通過(guò)xml手工組織的多數(shù)據(jù)源配置等。
上面這些原因都會(huì)導(dǎo)致不必要的自動(dòng)化配置加載而導(dǎo)致應(yīng)用無(wú)法啟動(dòng)或觸發(fā)/health的健康檢查不通過(guò)等問(wèn)題。比如,我們?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)化配置的加載。
如何解決
為了解決上面所述的問(wèn)題,我們可以用兩種方法來(lái)解決:
- 通過(guò)外部依賴的修改來(lái)解決:通過(guò)與依賴方溝通,在對(duì)方提供的API依賴中去掉不必要的依賴
- 通過(guò)禁用指定的自動(dòng)化配置來(lái)避免加載不必要的自動(dòng)化配置,下面列舉了禁用的方法:
使用了@EnableAutoConfiguration的時(shí)候
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
使用了@SpringBootApplication的時(shí)候
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
使用了@SpringCloudApplication的時(shí)候
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) @SpringCloudApplication
通過(guò)配置文件來(lái)設(shè)置
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
總結(jié)
好了,大概就這樣,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持
相關(guān)文章
SpringBoot為啥不用配置啟動(dòng)類的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot為啥不用配置啟動(dòng)類的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04javaweb中ajax請(qǐng)求后臺(tái)servlet(實(shí)例)
下面小編就為大家?guī)?lái)一篇javaweb中ajax請(qǐng)求后臺(tái)servlet(實(shí)例)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Java兩種方式實(shí)現(xiàn)動(dòng)態(tài)代理
Java 在 java.lang.reflect 包中有自己的代理支持,該類(Proxy.java)用于動(dòng)態(tài)生成代理類,只需傳入目標(biāo)接口、目標(biāo)接口的類加載器以及 InvocationHandler 便可為目標(biāo)接口生成代理類及代理對(duì)象。我們稱這個(gè)Java技術(shù)為:動(dòng)態(tài)代理2020-10-10IDEA如何對(duì)單個(gè)的java class文件打成jar包
這篇文章主要介紹了IDEA如何對(duì)單個(gè)的java class文件打成jar包問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Windows環(huán)境IDEA下Ranger1.2.0源碼編譯詳細(xì)流程
本文給大家講解Windows環(huán)境IDEA下Ranger1.2.0源碼編譯過(guò)程,通過(guò)配置Tomcat,發(fā)布?security-admin-web項(xiàng)目,編譯啟動(dòng)tomcat即可完成,需要的朋友參考下2021-06-06解決Tomcat修改get提交請(qǐng)求亂碼問(wèn)題
這篇文章主要介紹了Tomcat修改get提交請(qǐng)求亂碼問(wèn)題的解決方案,需要的朋友參考下2017-04-04JVM自定義類加載器在代碼擴(kuò)展性實(shí)踐分享
這篇文章主要介紹了JVM自定義類加載器在代碼擴(kuò)展性實(shí)踐分享,一個(gè)類型從被加載到虛擬機(jī)內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個(gè)生命周期將會(huì)經(jīng)歷加載、驗(yàn)證、準(zhǔn)備、解析、初始化 、使用和卸載七個(gè)階段,其中驗(yàn)證、準(zhǔn)備、解析三個(gè)部分統(tǒng)稱為連接2022-06-06SpringCloud項(xiàng)目集成Feign、Hystrix過(guò)程解析
這篇文章主要介紹了SpringCloud項(xiàng)目集成Feign、Hystrix過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11