最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你看懂SpringBoot中的全局配置文件

 更新時間:2023年08月21日 09:05:22   作者:程序員阿紅  
這篇文章主要介紹了一文帶你看懂SpringBoot中的全局配置文件,全局配置文件能夠?qū)σ恍┠J配置值進行修改,Spring Boot使用一個application.properties或者application.yaml的文件作為全局配置文件,需要的朋友可以參考下

全局配置文件能夠?qū)σ恍┠J配置值進行修改。

Spring Boot使用一個application.properties或者application.yaml的文件作為全局配置文件,該文件存放在src/main/resource目錄或者類路徑的/config,一般會選擇resource目錄。

接下來,將針對這兩種全局配置文件進行講解 :

Spring Boot配置文件的命名及其格式:

  • application.properties
  • application.yaml
  • application.yml

1.application.properties配置文件

使用Spring Initializr方式構(gòu)建Spring Boot項目時,會在resource目錄下自動生成一個空的application.properties文件,Spring Boot項目啟動時會自動加載application.properties文件。

我們可以在application.properties文件中定義Spring Boot項目的相關(guān)屬性

當然,這些相關(guān)屬性可以是系統(tǒng)屬性、環(huán)境變量、命令參數(shù)等信息,也可以是自定義配置文件名稱和位置

#修改tomcat的版本號
server.port=8888
#定義數(shù)據(jù)庫的連接信息 JdbcTemplate
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/lagou
spring.datasource.username=root
spring.datasource.password=wu7787879

接下來,通過一個案例對Spring Boot項目application.properties配置文件的具體使用進行講解 演示:

預(yù)先準備了兩個實體類文件,后續(xù)會演示application.properties配置文件中的自定義配置屬性注入到Person實體類的對應(yīng)屬性中

創(chuàng)建實體類

先在項目的com.lagou包下創(chuàng)建一個pojo包,并在該包下創(chuàng)建兩個實體類Pet和Person

public class Pet {
  private String type;
  private String name;
}
@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
  private int id;       //id
  private String name;    //名稱
  private List hobby;    //愛好
  private String[] family; //家庭成員
  private Map map;
  private Pet pet;      //寵物
}

@ConfigurationProperties(prefix = “person”)注解的作用是將配置文件中以person開頭的屬性值通過setXX()方法注入到實體類對應(yīng)屬性中@Component注解的作用是將當前注入屬性值的Person類對象作為Bean組件放到Spring容器中,只有這樣@ConfigurationProperties注解進行賦值

打開項目的resources目錄

打開項目的resources目錄下的application.properties配置文件,在該配置文件中編寫需要對Person類設(shè)置的配置屬性

#自定義配置信息
person.id=1
person.name=王二麻子
person.hobby=read,write
person.family=father,mather
person.map.key1=value1
person.map.key2=value2
person.pet.type=dog
person.pet.name=哈士奇

查看application.properties配置文件是否正確

同時查看屬性配置效果,打開通過IDEA工具創(chuàng)建的項目測試類,在該測試類中引入Person實體類Bean,并進行輸出測試

@RunWith(SpringRunner.class) // 測試啟動器,并加載Spring Boot測試注解
@SpringBootTest  // 標記為Spring Boot單元測試類,并加載項目的ApplicationContext上下文環(huán)
境
class SpringbootDemoApplicationTests {
    // 配置測試
    @Autowired
    private Person person;
    @Test
    void configurationTest() {
      System.out.println(person);
    }
}

打印結(jié)果:

image-20220622231527752

可以看出,測試方法configurationTest()運行成功,同時正確打印出了Person實體類對象。至此,說明application.properties配置文件屬性配置正確,并通過相關(guān)注解自動完成了屬性注入

中文亂碼問題解決

調(diào)整文件編碼格式:

image-20220622231818914

設(shè)置Tomcat及Http編碼

#解決中文亂碼
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true

2. application.yaml配置文件

YAML文件格式是Spring Boot支持的一種JSON文件格式,相較于傳統(tǒng)的Properties配置文件,YAML文件以數(shù)據(jù)為核心,是一種更為直觀且容易被電腦識別的數(shù)據(jù)序列化格式。application.yaml配置文件的 工作原理和application.properties是一樣的,只不過yaml格式配置文件看起來更簡潔一些。

YAML文件的擴展名可以使用.yml或者.yaml。

application.yml文件使用 “key:(空格)value”格式配置屬性,使用縮進控制層級關(guān)系。

SpringBoot的三種配置文件是可以共存的:

image-20220622231939749

這里,針對不同數(shù)據(jù)類型的屬性值,介紹一下YAML

value值為普通數(shù)據(jù)類型

value值為普通數(shù)據(jù)類型(例如數(shù)字、字符串、布爾等)

當YAML配置文件中配置的屬性值為普通數(shù)據(jù)類型時,可以直接配置對應(yīng)的屬性值,同時對于字符串類型的屬性值,不需要額外添加引號,示例代碼如下

server:
 port: 8080
 servlet:
 context-path: /hello

value值為數(shù)組和單列集合

當YAML配置文件中配置的屬性值為數(shù)組或單列集合類型時,主要有兩種書寫方式:縮進式寫法和行內(nèi)式寫法。

其中,縮進式寫法還有兩種表示形式,示例代碼如下

person:
 hobby:
 - play
 - read
 - sleep

或者使用如下示例形式

person:
 hobby:
  play,
  read,
  sleep

上述代碼中,在YAML配置文件中通過兩種縮進式寫法對person對象的單列集合(或數(shù)組)類型的愛好hobby賦值為play、read和sleep。其中一種形式為“-(空格)屬性值”,另一種形式為多個屬性值之前加英文逗號分隔(注意,最后一個屬性值后不要加逗號)。

person:
hobby: [play,read,sleep]

通過上述示例對比發(fā)現(xiàn),YAML配置文件的行內(nèi)式寫法更加簡明、方便。另外,包含屬性值的中括號“[]”還可以進一步省略,在進行屬性賦值時,程序會自動匹配和校對

value值為Map集合和對象

當YAML配置文件中配置的屬性值為Map集合或?qū)ο箢愋蜁r,YAML配置文件格式同樣可以分為兩種書寫方式:縮進式寫法和行內(nèi)式寫法。

其中,縮進式寫法的示例代碼如下

person:
 map:
  k1: v1
  k2: v2

對應(yīng)的行內(nèi)式寫法示例代碼如下

person:
 map: {k1: v1,k2: v2}

在YAML配置文件中,配置的屬性值為Map集合或?qū)ο箢愋蜁r,縮進式寫法的形式按照YAML文件格式編寫即可,而行內(nèi)式寫法的屬性值要用大括號“{}”包含。

接下來,在Properties配置文件演示案例基礎(chǔ)上,通過配置application.yaml配置文件對Person對象進行賦值,具體使用如下

(1)在項目的resources目錄下,新建一個application.yaml配置文件,在該配置文件中編寫為Person類設(shè)置的配置屬性

#對實體類對象Person進行屬性配置
person:
 id: 1
 name: 王二麻子
 family:
  - 妻
  - 妾
 hobby:
  - play
  - read
  - sleep
 map:
  k1: value1
  k2: value2
 pet:
  type: 狗
  name: 哈士奇

(2)再次執(zhí)行測試結(jié)果

Person{
	id=1, 
	name='王二麻子', 
    hobby=[play, read, sleep], 
    family=[妻, 妾],
    map={k1=value1,k2=value2}, 
    pet=Pet{type='狗', name='哈士奇'}
}

可以看出,測試方法configurationTest()同樣運行成功,并正確打印出了Person實體類對象。

需要說明的是,本次使用application.yaml配置文件進行測試時需要提前將application.properties配置文件中編寫的配置注釋,這是因為application.properties配置文件會覆蓋application.yaml配置文件

3. 配置文件屬性值的注入

配置文件的優(yōu)先級如下: 從低到高

<includes>
     <include>**/application*.yml</include>
     <include>**/application*.yaml</include>
     <include>**/application*.properties</include>
 </includes

使用Spring Boot全局配置文件設(shè)置屬性時:

如果配置屬性是Spring Boot已有屬性,例如服務(wù)端server.port,那么Spring Boot內(nèi)部會自動掃描并讀取這些配置文件中的屬性值并覆蓋默認屬性。

如果配置的屬性是用戶自定義屬性,例如剛剛自定義的Person實體類屬性,還必須在程序中注入這些配置屬性方可生效。

Spring Boot支持多種注入配置文件屬性的方式,下面來介紹如何使用注解@ConfigurationProperties和@Value注入屬性

4. 使用@ConfigurationProperties注入屬性

Spring Boot提供的@ConfigurationProperties注解用來快速、方便地將配置文件中的自定義屬性值批量注入到某個Bean對象的多個對應(yīng)屬性中。

假設(shè)現(xiàn)在有一個配置文件,如果使用 @ConfigurationProperties注入配置文件的屬性,示例代碼如下:

@Data
@Component
//將配置文件中所有以person開頭的配置信息注入當前類中
//前提1:必須保證配置文件中person.xx與當前Person類的屬性名一致
//前提2:必須保證當前Person中的屬性都具有set方法
@ConfigurationProperties(prefix = "person")
public class Person {
  private int id;       //id
  private String name;    //名稱
  private List hobby;    //愛好
  private String[] family;  //家庭成員
  private Map map;
  private Pet pet;      //寵物
}

上述代碼使用@Component和@ConfigurationProperties(prefix = “person”)將配置文件中的每個屬性映射到person類組件中。

5. 使用@Value注入屬性

@Value注解是Spring框架提供的,用來讀取配置文件中的屬性值并逐個注入到Bean對象的對應(yīng)屬性中,Spring Boot框架從Spring框架中對@Value注解進行了默認繼承,所以在Spring Boot框架中還可以 使用該注解讀取和注入配置文件屬性值。使用@Value注入屬性的示例代碼如下

@Component
public class Person {
 @Value("${person.id}")
  private int id;   
}

上述代碼中,使用@Component和@Value注入Person實體類的id屬性。其中,@Value不僅可以將配置文件的屬性注入Person的id屬性,還可以直接給id屬性賦值,這點是@ConfigurationProperties不支持的

演示@Value注解讀取并注入配置文件屬性的使用:

創(chuàng)建實體類

在com.lagou.pojo包下新創(chuàng)建一個實體類Student,并使用@Value注解注入屬性

@Component
public class Student {
   @Value("${person.id}")
   private int id;
   @Value("${person.name}")
   private String name; //名稱
   //省略toString
 }

Student類使用@Value注解將配置文件的屬性值讀取和注入。 從上述示例代碼可以看出,使用@Value注解方式需要對每一個屬性注入設(shè)置,同時又免去了屬性的setXX()方法

再次打開測試類進行測試

@Autowired
private Student student;
    @Test
    public void studentTest() {
    System.out.println(student);
}

打印結(jié)果:

image-20220622234033721

可以看出,測試方法studentTest()運行成功,同時正確打印出了Student實體類對象。需要說明的是,本示例中只是使用@Value注解對實例中Student對象的普通類型屬性進行了賦值演示,而@Value注 解對于包含Map集合、對象以及YAML文件格式的行內(nèi)式寫法的配置文件的屬性注入都不支持,如果賦值會出現(xiàn)錯誤.

6. 自定義配置

spring Boot免除了項目中大部分的手動配置,對于一些特定情況,我們可以通過修改全局配置文件以適應(yīng)具體生產(chǎn)環(huán)境,可以說,幾乎所有的配置都可以寫在application.yml文件中,Spring Boot會自 動加載全局配置文件從而免除我們手動加載的煩惱。

但是,如果我們自定義配置文件,Spring Boot是無法識別這些配置文件的,此時就需要我們手動加載。接下來,將針對Spring Boot的自定義配置文件及其加載方式進行講解

使用@PropertySource加載配置文件

對于這種加載自定義配置文件的需求,可以使用@PropertySource注解來實現(xiàn)。@PropertySource注解用于指定自定義配置文件的具體位置和名稱

當然,如果需要將自定義配置文件中的屬性值注入到對應(yīng)類的屬性中,可以使用@ConfigurationProperties或者@Value注解進行屬性值注入

演示:

1、新建一個配置文件

打開Spring Boot項目的resources目錄,在項目的類路徑下新建一個test.properties自定義配置文件,在該配置文件中編寫需要設(shè)置的配置屬性

#對實體類對象MyProperties進行屬性配置
test.id=110
test.name=test

2、創(chuàng)建一個配置類MyProperties

在com.lagou.pojo包下新創(chuàng)建一個配置類MyProperties,提供test.properties自定義配置文件中對應(yīng)的屬性,并根據(jù)@PropertySource注解的使用進行相關(guān)配置

@Component  // 自定義配置類
@PropertySource("classpath:test.properties")  // 指定自定義配置文件位置和名稱
@ConfigurationProperties(prefix = "test")    // 指定配置文件注入屬性前綴
public class MyProperties {
  private int id;
  private String name;
  // 省略屬性getXX()和setXX()方法
  // 省略toString()方法
}

主要是一個自定義配置類,通過相關(guān)注解引入了自定義的配置文件,并完成了自定義屬性值的注入。針對示例中的幾個注解,具體說明如下

  • @PropertySource(“classpath:test.properties”)注解指定了自定義配置文件的位置和名稱,此示例表示自定義配置文件為classpath類路徑下的test.properties文件;
  • @ConfigurationProperties(prefix = “test”)注解將上述自定義配置文件test.properties中以test開頭的屬性值注入到該配置類屬性中。

3、進行測試

@Autowired
 private MyProperties myProperties;
 @Test
 public void myPropertiesTest() {
  System.out.println(myProperties);
}

打印結(jié)果:

image-20220622235312834

使用@Configuration編寫自定義配置類

在Spring Boot框架中,推薦使用配置類的方式向容器中添加和配置組件

在Spring Boot框架中,通常使用@Configuration注解定義一個配置類,Spring Boot會自動掃描和識別配置類,從而替換傳統(tǒng)Spring框架中的XML配置文件。

當定義一個配置類后,還需要在類中的方法上使用@Bean注解進行組件配置,將方法的返回對象注入到Spring容器中,并且組件名稱默認使用的是方法名,當然也可以使用@Bean注解的name或value屬性自定義組件的名稱

演示:

1、新建一個普通類

在項目下新建一個com.lagou.config包,并在該包下新創(chuàng)建一個類MyService,該類中不需要編寫任何代碼

public class MyService {
}

創(chuàng)建了一個空的MyService類,而該類目前沒有添加任何配置和注解,因此還無法正常被Spring Boot掃描和識別

2、新建配置類

在項目的com.lagou.config包下,新建一個類MyConfig,并使用@Configuration注解將該類聲明一個配置類,內(nèi)容如下:

@Configuration  // 定義該類是一個配置類````
public class MyConfig {
  @Bean     // 將返回值對象作為組件添加到Spring容器中,該組件id默認為方法名
  public MyService myService(){
    return new MyService();
 }
}

MyConfig是@Configuration注解聲明的配置類(類似于聲明了一個XML配置文件),該配置類會被Spring Boot自動掃描識別;使用@Bean注解的myService()方法,其返回值對象會作為組件添加到了 Spring容器中(類似于XML配置文件中的標簽配置),并且該組件的id默認是方法名myService

3、測試類

@Autowired
private ApplicationContext applicationContext;
@Test
public void iocTest() {
  System.out.println(applicationContext.containsBean("myService"));
}

上述代碼中,先通過@Autowired注解引入了Spring容器實例ApplicationContext,然后在測試方法iocTest()中測試查看該容器中是否包括id為myService的組件。執(zhí)行測試方法iocTest() ,查看控制臺輸出效果,結(jié)果如下:

image-20220622235830549

從測試結(jié)果可以看出,測試方法iocTest()運行成功,顯示運行結(jié)果為true,表示Spirng的IOC容器中也已經(jīng)包含了id為myService的實例對象組件,說明使用自定義配置類的形式完成了向Spring容器進行組件的添加和配置

到此這篇關(guān)于一文帶你看懂SpringBoot中的全局配置文件的文章就介紹到這了,更多相關(guān)SpringBoot全局配置文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java深入淺出數(shù)組的定義與使用下篇

    Java深入淺出數(shù)組的定義與使用下篇

    數(shù)組是有序的元素序列,若將有限個類型相同的變量的集合命名,那么這個名稱為數(shù)組名。組成數(shù)組的各個變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時也稱為下標變量。數(shù)組是在程序設(shè)計中,為了處理方便,?把具有相同類型的若干元素按有序的形式組織起來的一種形式
    2022-03-03
  • SpringBoot3.0+SpringSecurity6.0+JWT的實現(xiàn)

    SpringBoot3.0+SpringSecurity6.0+JWT的實現(xiàn)

    本文主要介紹了SpringBoot3.0+SpringSecurity6.0+JWT的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • 分析java并發(fā)中的wait notify notifyAll

    分析java并發(fā)中的wait notify notifyAll

    一個線程修改一個對象的值,而另一個線程則感知到了變化,然后進行相應(yīng)的操作,這就是wait()、notify()和notifyAll()方法的本質(zhì)。本文將詳細來介紹它們概念實現(xiàn)以及區(qū)別
    2021-06-06
  • Spring?Cloud?OpenFeign實例介紹使用方法

    Spring?Cloud?OpenFeign實例介紹使用方法

    Spring?Cloud?OpenFeign?對?Feign?進行了二次封裝,使得在?Spring?Cloud?中使用?Feign?的時候,可以做到使用?HTTP?請求訪問遠程服務(wù),就像調(diào)用本地方法一樣的,開發(fā)者完全感知不到這是在調(diào)用遠程訪問,更感知不到在訪問?HTTP?請求
    2022-09-09
  • SpringBoot基于Mybatis攔截器和JSqlParser實現(xiàn)數(shù)據(jù)隔離

    SpringBoot基于Mybatis攔截器和JSqlParser實現(xiàn)數(shù)據(jù)隔離

    本文將介紹如何在 Spring Boot 項目中利用Mybatis的強大攔截器機制結(jié)合JSqlParser,一個功能豐富的 SQL 解析器,來輕松實現(xiàn)數(shù)據(jù)隔離的目標,本文根據(jù)示例展示如何根據(jù)當前的運行環(huán)境來實現(xiàn)數(shù)據(jù)隔離,需要的朋友可以參考下
    2024-04-04
  • Java歐拉函數(shù)的計算代碼詳解

    Java歐拉函數(shù)的計算代碼詳解

    這篇文章主要介紹了Java實現(xiàn)歐拉函數(shù)的計算,從歐拉函數(shù)引伸出來在環(huán)論方面的事實和拉格朗日定理構(gòu)成了歐拉定理的證明,本文通過實例代碼給大家介紹的很詳細,需要的朋友可以參考下
    2021-05-05
  • IDEA配置tomcat的方法、IDEA配置tomcat運行web項目詳解

    IDEA配置tomcat的方法、IDEA配置tomcat運行web項目詳解

    這篇文章主要介紹了IDEA配置tomcat的方法、IDEA配置tomcat運行web項目詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解shrio的認證(登錄)過程

    詳解shrio的認證(登錄)過程

    這篇文章主要介紹了shrio的認證(登錄)過程,幫助大家更好的理解和使用shrio框架,感興趣的朋友可以了解下
    2021-02-02
  • 如何利用Java使用AOP實現(xiàn)數(shù)據(jù)字典轉(zhuǎn)換

    如何利用Java使用AOP實現(xiàn)數(shù)據(jù)字典轉(zhuǎn)換

    這篇文章主要介紹了如何利用Java使用AOP實現(xiàn)數(shù)據(jù)字典轉(zhuǎn)換,AOP也是我們常說的面向切面編程,AOP在我們開發(fā)過程中應(yīng)用也比較多,在這里我們就基于AOP來實現(xiàn)一個數(shù)據(jù)字典轉(zhuǎn)換的案例
    2022-06-06
  • 解讀maven配置阿里云鏡像問題

    解讀maven配置阿里云鏡像問題

    這篇文章主要介紹了解讀maven配置阿里云鏡像問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

南溪县| 巩留县| 富顺县| 什邡市| 静海县| 珠海市| 洞头县| 平阴县| 彝良县| 兴业县| 波密县| 米林县| 新建县| 湟中县| 宝坻区| 卫辉市| 麻城市| 永新县| 中卫市| 兴和县| 宜良县| 湘阴县| 和林格尔县| 公安县| 四平市| 普定县| 德保县| 秀山| 花垣县| 星座| 华容县| 探索| 务川| 乌什县| 延边| 柳河县| 克东县| 铜鼓县| 蒙阴县| 陆良县| 阳东县|