亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springBoot中的properties配置解析

 更新時(shí)間:2022年03月24日 09:05:36   作者:唯一浩哥  
這篇文章主要介紹了springBoot中的properties配置解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot中免除了大部分手動(dòng)配置,但是對(duì)于一些特定的情況,還是需要我們進(jìn)行手動(dòng)配置的,SpringBoot為我們提供了application.properties配置文件,讓我們可以進(jìn)行自定義配置,來對(duì)默認(rèn)的配置進(jìn)行修改,以適應(yīng)具體的生產(chǎn)情況,當(dāng)然還包括一些第三方的配置。

幾乎所有配置都可以寫到application.peroperties文件中,這個(gè)文件會(huì)被SpringBoot自動(dòng)加載,免去了我們手動(dòng)加載的煩惱。

但實(shí)際上,很多時(shí)候我們卻會(huì)自定義配置文件,這些文件就需要我們進(jìn)行手動(dòng)加載,SpringBoot是不會(huì)自動(dòng)識(shí)別這些文件的,下面就來仔細(xì)看看這些方面的內(nèi)容。

1、配置文件的格式

SpringBoot可以識(shí)別兩種格式的配置文件,分別是yml文件與properties文件,我們可以將application.properties文件換成application.yml,這兩個(gè)文件都可以被SpringBoot自動(dòng)識(shí)別并加載,但是如果是自定義的配置文件,就最好還是使用properties格式的文件,因?yàn)镾pringBoot中暫時(shí)還并未提供手動(dòng)加載yml格式文件的功能(這里指注解方式)。

application.properties配置文件欲被SpringBoot自動(dòng)加載,需要放置到指定的位置:src/main/resource目錄下,一般自定義的配置文件也位于此目錄之下。

2、配置文件的加載

加載的意思就是將文件讀取到Spring容器之中,更確切的說就是將各個(gè)配置項(xiàng)裝載到Spring上下文容器之中供隨時(shí)取用。

application.properties配置文件是在SpringBoot項(xiàng)目啟動(dòng)的時(shí)候被自動(dòng)加載的,其內(nèi)部的相關(guān)設(shè)置會(huì)自動(dòng)覆蓋SpringBoot默認(rèn)的對(duì)應(yīng)設(shè)置項(xiàng),所以的配置項(xiàng)均會(huì)保存到Spring容器之中。

1-公共配置文件:application.properties

 donghao.name=唯一浩哥
 donghao.sex=男
 donghao.age=80

自定義的xxx.properties配置文件是不會(huì)被SpringBoot自動(dòng)加載的,需要手動(dòng)去進(jìn)行加載,這里的手動(dòng)加載一般指的是注解的方式加載,這里就涉及到我們今天的重點(diǎn)之一:加載自定義屬性文件的注解:@PropertySource("classpath:xxx.properties"),這個(gè)注解專門用來加載指定位置的properties文件,Spring暫未提供加載指定位置yml文件的注解,所以才有之前的說法。

2-自定義配置文件:donghao.properties

 donghao1.name=動(dòng)畫
 donghao1.sex=女
 donghao1.age=22

其實(shí)無論對(duì)于哪里的properties文件,當(dāng)我們需要使用其中配置內(nèi)容的時(shí)候,就在當(dāng)前類的頂部加注該注解,將該配置文件加載到內(nèi)存,這些配置文件一次加載即可多次使用。

但更通用的情況是新建一個(gè)配置類,使用@Configuration標(biāo)注,再加上之前的@PropertySource("classpath:xxx.properties")注解,而類的內(nèi)部并不需要任何內(nèi)容,這是一個(gè)純粹的配置加載類。

由于@Configuration的作用(底層為@Component),他會(huì)被Spring的掃描器掃到,并加載到JVM,并創(chuàng)建Bean,而創(chuàng)建的時(shí)候就會(huì)執(zhí)行配置文件中配置項(xiàng)的加載。

這種方式加載的配置可以在任何Spring管轄的類中用@Value("${key}")的方式使用,見下方介紹。

3、配置項(xiàng)的使用

配置項(xiàng)的使用其實(shí)很簡(jiǎn)單,只要是加載到Spring容器中的配置項(xiàng)都可以直接使用@Value("${key}")的方式來引用,一般將其配置在字段頂部,表示將配置項(xiàng)的值賦值給該字段。

當(dāng)然更多的情況是將這些配置項(xiàng)與一個(gè)JavaBean綁定起來使用,這樣綁定一次,我們就可以隨時(shí)使用。這里涉及到兩種情況,一種是將application.properties中的配置與JavaBean綁定,一種是將自定義配置文件中的配置與Javabean綁定。

第一種:applicaiton.properties屬性綁定JavaBean

這種情況相對(duì)簡(jiǎn)單(因?yàn)閍pplication.properties文件會(huì)被自動(dòng)加載,也就是說配置項(xiàng)會(huì)被自動(dòng)加載到內(nèi)存,到Spring容器之中,省去了手動(dòng)加載的配置),然后我們?cè)谝c屬性綁定的JavaBean的類定義頂部加@Component注解和@ConfigurationProperties(prefix="key")注解,

前者的目的是為了這個(gè)JavaBean可以被SpringBoot項(xiàng)目啟動(dòng)時(shí)候被掃描到并加載到Spring容器之中,重點(diǎn)是后者,這個(gè)注解一般不是單獨(dú)使用的,他一般與后面要說的@EnableConfigurationProperties(JavaBean.class)配合使用,但是二者并非使用在同一位置,@ConfigurationProperties(prefix="key")注解加注在JavaBean類定義之上,按字面可以理解為屬性配置注解,更直接點(diǎn)的說法就是屬性綁定注解,

官方解釋是:如果想要綁定或者驗(yàn)證一些來源自.properties文件中的額外屬性時(shí),你可以在一個(gè)標(biāo)注的@Configuration的類的注有@Bean注解的方法或者一個(gè)類之上加注這個(gè)注解。

我們完全可以將其理解為綁定專用注解。它的作用就是將指定的前綴的配置項(xiàng)的值與JavaBean的字段綁定,這里要注意,為了綁定的成功,一般將字段的名稱與配置項(xiàng)鍵的最后一個(gè)鍵名相同,這樣整個(gè)鍵在去掉前綴的情況下就和字段名稱一致,以此來進(jìn)行綁定。

第二種:自定義配置的屬性綁定JavaBean

這種情況與之前的基本相同,只是不能自動(dòng)加載,需要手動(dòng)加載,在JavaBean之上加上之前介紹的@PropertySource注解進(jìn)行配置文件加載。還有一點(diǎn)就是將@Component改為@Configuration,為什么這么做呢?

@Configuration注解的底層就是@Component,但是二者意義不同,@Configuration注解側(cè)重配置之意,@Component側(cè)重組件之意,當(dāng)然配置也是項(xiàng)目組件之一,在這里我們要將配置文件屬性與JavaBean綁定,當(dāng)然更側(cè)重配置之意。

將配置與JavaBean綁定之后,我們就可以通過JavaBean來獲取配置的內(nèi)容,而且JavaBean已經(jīng)被@Component注解或者@Configuration注解加載到Spring容器,我們可以使用自動(dòng)注入的方式在其他類中隨便使用。

這里要注意一點(diǎn):當(dāng)我們?cè)谀硞€(gè)類中要使用這個(gè)JavaBean時(shí),需要在這個(gè)類中指定這個(gè)JavaBean的類型,這個(gè)指定也要使用注解來指定,正是之前介紹的@EnableConfigurationProperties注解,這個(gè)注解與@ConfigurationProperties注解配套使用。

官方給出的解釋:這個(gè)注解是對(duì)@ConfigurationProperties的有效支持。

標(biāo)注有@ConfigurationProperties注解的Beans可以被使用標(biāo)準(zhǔn)的方式注冊(cè)(使用@Bean注解),或者,為了方便起見,直接用使用@EnableConfigurationProperties指定注冊(cè)。意思是這個(gè)注解提供了一種方便直接的注冊(cè)Bean的方式。

3-綁定JavaBean:Donghao.java

package com.donghao.model;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:donghao.properties")
@ConfigurationProperties(prefix="donghao1")
public class Donghao {
    private String name;
    private String sex;
    private String age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
}

4-定義控制器:DonghaoController

package com.donghao.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.donghao.model.Donghao;
@RestController
@RequestMapping("/donghao")
@EnableConfigurationProperties(Donghao.class)
public class DonghaoController {
    @Autowired
    Donghao donghao;
    @Value("${donghao.name}")
    private String name;
    @Value("${donghao.sex}")
    private String sex;
    @Value("${donghao.age}")
    private String age;
    @RequestMapping("/hello")
    public String hello(){
        return "我的名字叫"+name+",我是"+sex+"生,今年"+age+"歲了!";
    }
    @RequestMapping("/ss")
    public String ss(){
        return donghao.getName()+donghao.getSex()+donghao.getAge();
    }
}

5-定義啟動(dòng)入口類:DonghaoApplication.java

package com.donghao;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DonghaoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DonghaoApplication.class, args);
    }
}

啟動(dòng)程序之后,瀏覽器訪問:http://localhost:8080/donghao/hello,結(jié)果為:

瀏覽器訪問:http://localhost:8080/donghao/ss

我這里要重點(diǎn)強(qiáng)調(diào)一點(diǎn),加載和使用并不相關(guān)聯(lián),雖然加載的目的是為了使用,但是加載和使用之間并不是強(qiáng)關(guān)聯(lián)的,我們完全可以加載但不使用,所以我們應(yīng)該將加載的過程與使用的過程分開來分析,它們對(duì)應(yīng)于不同的注解,這些注解之間也不是強(qiáng)關(guān)聯(lián)的,他們各有各的用途,如果只是加載自定義配置文件,只要一個(gè)@PropertySource注解就完事,使用方面的注解不用去管,當(dāng)需要使用的時(shí)候,我們完全可以選擇多種使用的方式,直接使用的話我們就使用@Value注解進(jìn)行直接賦值,這個(gè)注解就可以直接將被加載到Spring容器中(environment)的屬性配置的值賦值到指定的字段,當(dāng)然也可以使用綁定JavaBean的方式。

還有一點(diǎn)要注意,千萬(wàn)不要在公共配置文件application.properties和自定義配置文件xxx.properties中配置相同的的配置項(xiàng)的不同值,因?yàn)楣才渲梦募膬?yōu)先權(quán)最高,會(huì)覆蓋掉自定義配置文件中的內(nèi)容,你可以這么理解,公共配置文件中的某個(gè)配置被在啟動(dòng)時(shí)加載到Spring容器中,之后又在另外一個(gè)自定義配置文件中加載了同名的配置項(xiàng),二者有不同的值,但是系統(tǒng)會(huì)檢查二者的優(yōu)先權(quán),誰(shuí)高誰(shuí)留,誰(shuí)低誰(shuí)走,最后自定義配置文件中的值無效。

補(bǔ)充:感謝朋友Vtria丶提出的問題,這里添加一點(diǎn)補(bǔ)充內(nèi)容

有些時(shí)候我們需要定義一些靜態(tài)的字段(變量),也想使用這種方式實(shí)現(xiàn)值的注入,但是發(fā)現(xiàn)注入不進(jìn)去,原因何在呢?這需要對(duì)值注入的原理有些了解,值的注入和屬性的注入類似,都是基于set方法實(shí)現(xiàn)的,那么就簡(jiǎn)單了,我們只要針對(duì)靜態(tài)變量添加set方法即可,但是添加之后發(fā)現(xiàn)還是不好使,因?yàn)槲覀冞€需要將Value注解轉(zhuǎn)移到set方法上來,這樣就可以實(shí)現(xiàn)注入了。set方法的寫法可以與普通變量的寫法相同,用this調(diào)用,也可以直接類名點(diǎn)用。

比如:我們?cè)赼pplicaiton.properties中添加:

huahua=123321

然后在DonghaoController中添加如下代碼:

private static String huahua;
    @Value("${huahua}")
    public void setHuahua(String huahua){
//        this.huahua = huahua;
        DonghaoController.huahua = huahua;
    }
    @RequestMapping("/hh")
    public String hh(){
        return "新的測(cè)試"+ huahua;
    }

上面的兩種寫法均可實(shí)現(xiàn)目標(biāo)。

如此施為,即可實(shí)現(xiàn)靜態(tài)變量的值注入。

瀏覽器訪問:http://localhost:8080/donghao/hh

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • servlet下載文件實(shí)現(xiàn)代碼詳解(五)

    servlet下載文件實(shí)現(xiàn)代碼詳解(五)

    這篇文章主要為大家詳細(xì)介紹了servlet下載文件的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java正則校驗(yàn)密碼至少包含字母數(shù)字特殊符號(hào)中的2種實(shí)例代碼

    Java正則校驗(yàn)密碼至少包含字母數(shù)字特殊符號(hào)中的2種實(shí)例代碼

    正則表達(dá)式驗(yàn)證密碼功能在項(xiàng)目中經(jīng)常被使用到,但是很多朋友還是不大會(huì)使用密碼正則表達(dá)式進(jìn)行驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于Java正則校驗(yàn)密碼至少包含字母數(shù)字特殊符號(hào)中2種的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • java WSDL接口webService實(shí)現(xiàn)方式

    java WSDL接口webService實(shí)現(xiàn)方式

    這篇文章主要為大家詳細(xì)介紹了java WSDL接口webService實(shí)現(xiàn)方式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • JavaWeb JDBC + MySql 通訊錄實(shí)現(xiàn)簡(jiǎn)單的增刪改查功能案例詳解

    JavaWeb JDBC + MySql 通訊錄實(shí)現(xiàn)簡(jiǎn)單的增刪改查功能案例詳解

    這篇文章主要介紹了JavaWeb JDBC + MySql 通訊錄實(shí)現(xiàn)簡(jiǎn)單的增刪改查功能,結(jié)合具體案例形式詳細(xì)分析了JavaWeb JDBC + MySql數(shù)據(jù)庫(kù)連接、增刪改查等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-08-08
  • SpringBoot+SpringSecurity+JWT實(shí)現(xiàn)系統(tǒng)認(rèn)證與授權(quán)示例

    SpringBoot+SpringSecurity+JWT實(shí)現(xiàn)系統(tǒng)認(rèn)證與授權(quán)示例

    本文主要介紹了SpringBoot+SpringSecurity+JWT實(shí)現(xiàn)系統(tǒng)認(rèn)證與授權(quán)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • springCloud項(xiàng)目搭建流程步驟分解

    springCloud項(xiàng)目搭建流程步驟分解

    SpringCloud 作為當(dāng)下最為流行的微服務(wù)框架,也越來越多的人去學(xué)習(xí)和使用這個(gè)框架。下面,我將帶大家簡(jiǎn)單地認(rèn)識(shí)一下 SpringCloud 框架,以及如何來搭建一個(gè) SpringCloud 項(xiàng)目環(huán)境的教程
    2022-05-05
  • Java解析Excel內(nèi)容的方法

    Java解析Excel內(nèi)容的方法

    這篇文章主要介紹了Java解析Excel內(nèi)容的方法,實(shí)例分析了java解析excel文件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 談?wù)凧ava中Volatile關(guān)鍵字的理解

    談?wù)凧ava中Volatile關(guān)鍵字的理解

    volatile這個(gè)關(guān)鍵字可能很多朋友都聽說過,或許也都用過。在Java 5之前,它是一個(gè)備受爭(zhēng)議的關(guān)鍵字,因?yàn)樵诔绦蛑惺褂盟鶗?huì)導(dǎo)致出人意料的結(jié)果,本文給大家介紹java中volatile關(guān)鍵字,需要的朋友參考下
    2016-03-03
  • IDEA報(bào)錯(cuò):Unable to save settings Failed to save settings

    IDEA報(bào)錯(cuò):Unable to save settings Failed to save settings

    這篇文章主要介紹了IDEA報(bào)錯(cuò):Unable to save settings Failed to save settings的相關(guān)知識(shí),本文給大家分享問題原因及解決方案,需要的朋友可以參考下
    2020-09-09
  • Java中字符串常見題之String相關(guān)講解

    Java中字符串常見題之String相關(guān)講解

    今天小編就為大家分享一篇關(guān)于Java中字符串常見題之String相關(guān)講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評(píng)論