国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot的自動配置與自定義配置(附配置優(yōu)先級表)

這篇具有很好參考價值的文章主要介紹了Spring Boot的自動配置與自定義配置(附配置優(yōu)先級表)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

相比于Spring MVC,Spring Boot省去了繁瑣的配置,提供了大部分場景下的默認(rèn)配置,用戶可以在不做任何配置的情況下使用Spring Boot框架進行開發(fā)。如果默認(rèn)的參數(shù)并不能滿足用戶的需求,也只需創(chuàng)建一個配置文件并加上自定義的配置。Spring Boot的主導(dǎo)思想,想必大家也并不陌生,即:約定優(yōu)于配置。

本文將簡要介紹Spring Boot的自動配置原理,以及自動配置不能滿足要求時,如何自定義配置。

一、Spring Boot的自動配置

Spring Boot之所以能做到自動配置,主要靠的是@EnableAutoConfiguration注解。這個注解集成于程序啟動類注解@SpringBootApplication中。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
	...
}

查看@EnableAutoConfiguration的源碼,發(fā)現(xiàn)兩個主要注解:@AutoConfigurationPackage和@Import。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

查看@AutoConfigurationPackage注解,發(fā)現(xiàn)也使用了@Import注解,所以有必要先搞懂這個注解的作用。這里推薦一篇博文,感興趣的朋友可以看一下。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({AutoConfigurationPackages.Registrar.class})
public @interface AutoConfigurationPackage {
    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};
}

回到主題,@EnableAutoConfiguration中@Import注解通過引入ImportSelector實現(xiàn)類的方式將依賴中的默認(rèn)配置加載到容器中。AutoConfigurationImportSelector類的具體內(nèi)容在這里不做分析,這個過程簡而言之就是:

查看Jar包中META-INF/spring.factories文件,獲取其中EnableAutoConfiguration配置的value值。value值是由多個url組成,一個url表示一個配置類的全類名。然后通過@Import注解導(dǎo)入這些配置類。

@AutoConfigurationPackage中的@Import是通過引入ImportBeanDefinitionRegistrar實現(xiàn)類方式將各種組件和配置引入Spring容器的。簡而言之,就是將標(biāo)注了該注解的類所在的package設(shè)置成為自動配置package,這樣主程序所在的包及其子包中的組件都能夠被掃描到Spring容器中。

案例

下面將通過Tomcat端口配置舉例,版本是spring-boot-actuator-autoconfigure-2.4.2.jar。解壓之后打開META-INF/spring.factoryies文件,發(fā)現(xiàn)org.springframework.boot.autoconfigure.EnableAutoConfiguration配置中如下配置類:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
...
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\
...

查看該配置類源碼:

@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(ServerProperties.class)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass(CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true)
public class HttpEncodingAutoConfiguration {
	...
}

我們重點關(guān)注@EnableConfigurationProperties(ServerProperties.class),這個注解的作用是使某個被@ConfigurationProperties標(biāo)注的類生效,這里指的就是ServerProperties類,我們查看ServerProperties類的源碼:

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {

		/**
		 * Server HTTP port.
		 */
		private Integer port;

		/**
		 * Network address to which the server should bind.
		 */
		private InetAddress address;
		...
}

順便提一句,@ConfigurationProperties是springboot提供讀取配置文件的一個注解,它支持屬性文件和bean的映射,一般和@component配合使用,不然容器無法獲取。如果單獨使用@ConfigurationProperties,需要結(jié)合@EnableConfigurationProperties(ServerProperties.class)將其注冊到spring容器中。

prefix = "server"表示該配置使用server前綴,和屬性port結(jié)合起來就是:server.port。我們都知道Tomcat的默認(rèn)端口是8080,那么這個參數(shù)又是在哪里配置的呢?答案是META-INF/spring-configuration-metadata.json。

{
	"name": "server.port",
    "defaultValue": 8080
}

可以看到文件中有這么一條配置,這就是我們需要的server.port = 8080。

二、自定義配置

學(xué)習(xí)完以上內(nèi)容,想要自定義配置就簡單多了,還是以Tomcat為例,如果我想將端口改為8081,只需在application.properties文件中加上:

server.port = 8081

至于為什么最終生效的是server.port = 8081而非server.port = 8080,就要提到Spring Boot中的配置優(yōu)先級了,Spring Boot會按照從上到下的順序加載:

  • 命令行參數(shù);
  • 來自 java:comp/env 的 JNDI 屬性;
  • Java 系統(tǒng)屬性(System.getProperties()) ;
  • 操作系統(tǒng)環(huán)境變量;
  • RandomValuePropertySource 配置的 random.*屬性值;
  • jar 包外部的 application-{profile}.properties 或 application.yml(帶 spring.profile)配置文件;
  • jar 包內(nèi)部的 application-{profile}.properties 或 application.ym(帶 spring.profile)配置文件;
  • jar 包外部的 application.properties 或 application.yml(不帶 spring.profile)配置文件;
  • jar 包內(nèi)部的 application.properties 或 application.ym(不帶 spring.profile)配置文件;
  • @Configuration 注解類上的@PropertySource;
  • 通過 SpringApplication.setDefaultProperties 指定的默認(rèn)屬性。

參考:

《深入淺出Spring Boot 2.x》文章來源地址http://www.zghlxwxcb.cn/news/detail-434191.html

到了這里,關(guān)于Spring Boot的自動配置與自定義配置(附配置優(yōu)先級表)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • springboot-配置優(yōu)先級

    springboot-配置優(yōu)先級

    類型 1.properties(三者同時存在,優(yōu)先級最高) 2.yml 3.yaml(最低) 除此之外,可以在啟動配置處修改 在jar包中修改配置屬性 1.pom文件需要導(dǎo)入打包的插件 2.使用package命令 3.用打開目錄的方式打開 4.在存放jar包的文件夾下打開命令行 5.java -jar jar包名,就能啟動springboot項目 6.jav

    2024年02月12日
    瀏覽(21)
  • nacos配置文件優(yōu)先級

    nacos配置文件優(yōu)先級

    當(dāng)前配置文件如下: 優(yōu)先級:userservice-dev.yml(當(dāng)前環(huán)境配置) userservice.yml(nacos上的) application.yml(本地的) 擴展配置(extension-configs) 共享配置(shared-configs) 同為擴展配置,存在如下優(yōu)先級關(guān)系:extension-configs[3] extension-configs[2] extension-configs[1] extension-configs[0] 同為共享配置

    2024年02月12日
    瀏覽(20)
  • springboot 配置文件優(yōu)先級

    springboot配置文件可以使用properties、yaml,一個系統(tǒng)中最好只使用一種格式,如果在同一個位置使用了properties、yaml,那么properties會覆蓋yaml,個人推薦使用yaml,支持結(jié)構(gòu)化,層次更清晰。 如果系統(tǒng)中有application.yml,application-specific.yml,jar包外也有application.yml,application-specif

    2024年02月13日
    瀏覽(20)
  • SpringBoot 配置文件加載優(yōu)先級

    SpringBoot 配置文件加載優(yōu)先級

    最近在使用k8s部署項目的時候,發(fā)現(xiàn)Dockerfile文件中的命令后面跟的參數(shù),無法覆蓋nacos中的參數(shù),今天有時間正好來整理一下Springboot配置的加載順序 整理加載順序第一個肯定看官方文檔:https://docs.spring.io/spring-boot/docs/2.2.9.RELEASE/reference/htmlsingle/#boot-features-external-config 看不懂我們直

    2024年02月02日
    瀏覽(25)
  • SpringBoot項目配置方式及優(yōu)先級

    SpringBoot項目配置方式及優(yōu)先級

    說明:SpringBoot支持以下五種方式配置方式,例如將項目的Tomcat端口從8080,更改為9000,可以使用如下方式配置 在啟動窗口,鼠標(biāo)右鍵,選擇“Edit Configurations”,在彈出來的窗口中,在Program arguments,里面填“–server.port=9000”,配置格式為兩個小橫杠(–)開頭 這種方式,可

    2024年02月08日
    瀏覽(21)
  • 【學(xué)習(xí)日記】【FreeRTOS】任務(wù)調(diào)度時如何考慮任務(wù)優(yōu)先級——任務(wù)的自動切換

    【學(xué)習(xí)日記】【FreeRTOS】任務(wù)調(diào)度時如何考慮任務(wù)優(yōu)先級——任務(wù)的自動切換

    本文開始為 RTOS 加入考慮任務(wù)優(yōu)先級的自動調(diào)度算法,代碼大部分參考野火。 本文主要是一篇學(xué)習(xí)筆記,加入了筆者自己對野火代碼的梳理和理解。 首先我們要知道,在 RTOS 中,優(yōu)先級越高、越需要被先執(zhí)行的的任務(wù)的優(yōu)先級的數(shù)字越大。比如優(yōu)先級數(shù)字為 5 的任務(wù)就要比

    2024年02月12日
    瀏覽(23)
  • SpringBoot啟動過程探究及配置文件優(yōu)先級解析

    如果項目依賴中存在org.springframework.web.reactive.DispatcherHandler,并且不存在org.springframework.web.servlet.DispatcherServlet,那么應(yīng)用類型為WebApplicationType.REACTIVE 如果項目依賴中不存在org.springframework.web.reactive.DispatcherHandler,也不存在org.springframework.web.servlet.DispatcherServlet,那么應(yīng)用類型為

    2024年02月09日
    瀏覽(48)
  • SpringCloud + Nacos配置文件加載順序和優(yōu)先級詳解

    SpringCloud + Nacos配置文件加載順序和優(yōu)先級詳解

    在微服務(wù)架構(gòu)中,合理地管理和理解配置文件的加載順序與優(yōu)先級對于確保應(yīng)用的穩(wěn)定性和靈活性至關(guān)重要。特別是在使用 Spring Cloud Alibaba Nacos 作為配置中心的場景下,這一點顯得尤為重要。本文將基于一個具體的 bootstrap.yml 配置示例,深入探討這些概念,并介紹如何通過

    2024年03月27日
    瀏覽(24)
  • Javaweb | 過濾器、配置、過濾器鏈、優(yōu)先級

    Javaweb | 過濾器、配置、過濾器鏈、優(yōu)先級

    ??wei_shuo的個人主頁 ??wei_shuo的學(xué)習(xí)社區(qū) ??Hello World ! 概念 過濾器(Filter)是處于客戶端與服務(wù)器目標(biāo)資源之間的一道過濾技術(shù) 用戶的請求和響應(yīng)都需要經(jīng)過過濾器 過濾器作用 執(zhí)行地位在Servlet之前,客戶端發(fā)送請求是,會先經(jīng)過Filter,再到達目標(biāo)Servlet中;響應(yīng)時,會根

    2023年04月17日
    瀏覽(95)
  • Nacos配置文件管理、微服務(wù)獲取Nacos配置文件、熱更新、配置共享、配置優(yōu)先級等

    Nacos配置文件管理、微服務(wù)獲取Nacos配置文件、熱更新、配置共享、配置優(yōu)先級等

    傳統(tǒng)項目中,當(dāng)我們需要修改配置文件時,需要修改配置文件,停掉服務(wù),重啟服務(wù),這樣不利于提升用戶體驗; 而使用Nacos進行項目的配置文件管理,則可以實現(xiàn)熱更新配置文件,在Nacos中修改之后,Nacos會通知項目新的配置文件。 添加配置文件 第一步,點擊添加配置:

    2023年04月11日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包