欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring配置文件超詳細(xì)講解

 更新時(shí)間:2025年03月03日 08:56:35   作者:小豬同學(xué)hy  
這篇文章主要介紹了Spring配置文件超的相關(guān)資料,配置文件是一種存放應(yīng)用程序或系統(tǒng)配置的文件,允許開發(fā)者和用戶在不修改代碼的情況下調(diào)整應(yīng)用程序的行為和性能,

什么是配置文件?

配置文件是一種存放應(yīng)用程序或系統(tǒng)配置的文件,包含了程序運(yùn)行時(shí)所需要的各種選項(xiàng)和配置信息,例如字體樣式、默認(rèn)語言等。它允許開發(fā)者和用戶在不修改代碼的情況下,調(diào)整應(yīng)用程序的行為和性能。配置文件通常以文本形式存在,格式可以是XML、JSON、YAML(yml)、INI、Properties等。

配置文件的作用

配置文件主要是為了解決硬編碼代碼的問題,把可能會(huì)發(fā)生改變的信息,放在一個(gè)集中的地方,當(dāng)我們啟動(dòng)某個(gè)程序時(shí),應(yīng)用程序從配置文件中讀取數(shù)據(jù),并加載運(yùn)行。

使用配置文件,可以使程序完成用戶和應(yīng)用程序的交互,或者應(yīng)用程序與其他應(yīng)用程序的交互。

硬編碼指的是將數(shù)據(jù)直接嵌入到程序或者其他可執(zhí)行對象的源代碼中,也就是我們常說的將“代碼寫死”。

SpringBoot配置文件

SpringBoot支持并定義了配置文件的格式,也是在另一個(gè)層面達(dá)到了規(guī)范其他框架集成到SpringBoot的目的。

很多項(xiàng)目或者框架的配置信息也放在配置文件中,如:

  • 項(xiàng)目的啟動(dòng)端口號(hào)
  • 數(shù)據(jù)庫的連接信息(包含用戶名和密碼的設(shè)置)
  • 第三方系統(tǒng)的調(diào)用密鑰等信息
  • 用于發(fā)現(xiàn)和定位問題的普通日志和異常日志等

SpringBoot中,內(nèi)置了Tomcat服務(wù)器,默認(rèn)端口號(hào)是8080,但在用戶電腦上8080端口號(hào)可能會(huì)被其他應(yīng)用程序占用,此外,如果啟動(dòng)多個(gè)SpringBoot項(xiàng)目,那么端口號(hào)也需要不同,所以SpringBoot需要支持讓用戶自定義端口號(hào)。

配置文件格式

在SpringBoot中,有三種不同形式的配置文件

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

yml是yaml的縮寫,實(shí)際開發(fā)中出現(xiàn)的頻率最高。yaml和yml使用方式是一樣的,都是鍵值對的形式,所以后面我們只講yml。

當(dāng)應(yīng)?程序啟動(dòng)時(shí),SpringBoot會(huì)?動(dòng)從classpath路徑找到并加載
application.properties 和 application.yaml 或者 application.yml ?件
,當(dāng)然也可以使用 spring.config.name 指定文件路徑和名稱。

配置文件的優(yōu)先級(jí)

  • 理論上,application.properties 和 application.yml 是可以同時(shí)存在同一個(gè)項(xiàng)目中的,當(dāng)這兩個(gè)配置文件都存在,兩個(gè)配置都會(huì)加載。如果配置文件內(nèi)容有沖突,以application.properties 為主,即 application.properties 的優(yōu)先級(jí)更高。
  • 雖然在理論上兩個(gè)配置文件可以共存,但在實(shí)際的業(yè)務(wù)中,我們都是采用一種統(tǒng)一的配置文件,這樣可以更好的維護(hù)(降低故障率)。

properties配置文件說明

properties配置文件是最早期的配置文件格式,也就是創(chuàng)建SpringBoot項(xiàng)目默認(rèn)的配置文件。

properties基本語法

properties是以鍵值對的形式配置的,key和value之間用“=”來連接。

示例:

#配置項(xiàng)目端口號(hào)
server.port=9090
#配置數(shù)據(jù)庫連接信息
spring.datasource.url=jdbc:mysql://localhost:3306/beantext?characterEncoding=utf-8&useSSL=false
#配置數(shù)據(jù)庫用戶名
spring.datasource.username=root
#配置數(shù)據(jù)庫密碼
spring.datasource.password=root
#配置數(shù)據(jù)庫驅(qū)動(dòng)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

配置文件中使用 # 來添加注釋信息。

讀取配置文件

在項(xiàng)目中,如果我們想要讀取到配置文件中的內(nèi)容,需要使用 @Value 注解,并且在注解中使用“${}”的格式來讀取

my.text=hello world
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/pro")
@RestController
public class PropertiesController {
    @Value("${my.text}")
    private String key;

    @RequestMapping("/text1")
    public String getValue() {
        return "獲取到的value為:" + key;
    }
}

properties缺點(diǎn)

properties配置是以鍵值對的形式配置的,我們通過觀察,可以看到里面有些代碼比較冗余。

此外,properties配置格式對中文也是不友好,我們把value值換為中文,再來試一下:

my.text=你好 世界

為什么會(huì)這樣,我們可以打斷點(diǎn)看一下:

可以看到,key的值是四個(gè)問號(hào)。 但是idea默認(rèn)的字符集是UTF-8,是支持中文的,為了防止這種情況發(fā)生,所以我們在properties配置文件中盡量不要出現(xiàn)中文。

接下來,我們來講一下yml配置文件。

yml配置文件說明

yml是yaml的縮寫,全程是 Yet Another Markup Language 翻譯過來就是“另一種標(biāo)記語言”。

yml基本語法

yml是樹形結(jié)構(gòu)的配置文件,基本語法是:key: value(注意:冒號(hào)后面是有空格的,不能省略?。?!

key后+(冒號(hào)+空格

我們可以看到,正確的寫法的key是會(huì)有高亮提示的(橙色,當(dāng)然應(yīng)該可以設(shè)置成其他顏色),而對于錯(cuò)誤的寫法,key還是灰色。

此外,只要冒號(hào)有空格隔開,就是正確的寫法,至于空格的數(shù)量,是不限的,當(dāng)然按照規(guī)范來寫的話,最好就一個(gè)。

使用yml連接數(shù)據(jù)庫

spring: 
  datasource:
    url: jdbc:mysql://localhost:3306/beantext?characterEncoding=utf-8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

可以看到,相對properties配置文件的寫法,yml配置文件的寫法不僅能夠體現(xiàn)出層級(jí)關(guān)系還能節(jié)省不必要的代碼。

此外,yml還有其他操作。

yml配置不同數(shù)據(jù)類型及null

# 字符串
string.value: hello

# 布爾類型
boolean.value: true
boolean.value1: false

# 整數(shù)類型
int.value: 10

# 浮點(diǎn)數(shù)
float.value: 3.14159

# Null  ~ 代表null
null.value: ~


# "" 空字符串
# '' 單引號(hào)也表示空字符串
# 冒號(hào)后面什么都不加也可以表示空字符串。但這種方式不直觀,更多的表示是使用引號(hào)括起來
empty:
  value1: ''
  value2: ""
  value3:

那么yml配置文件的屬性應(yīng)該如何獲?。?/p>

其實(shí)跟properties配置文件獲取屬性的操作一樣,都是要使用 @Value 注解來進(jìn)行獲取的。

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/pro")
@RestController
public class PropertiesController {
    @Value("${string.value}")
    private String value;

    @Value("${boolean.value}")
    private Boolean value1;

    @Value("${boolean.value1}")
    private Boolean value2;

    @Value("${int.value}")
    private Integer value3;

    @Value("${float.value}")
    private Float value4;

    @Value("${null.value}")
    private String value5;



    @RequestMapping("/getValue")
    public String getValue() {
        return "獲取到的value為:" + value+" | "+value1+" | "+value2+" | "+value3+" | "+value4+" | "+value5;
    }
}

 注意事項(xiàng)

字符串默認(rèn)不用加上單引號(hào)或者雙引號(hào),如果加英文的雙引號(hào)可以表示特殊的含義,而如果加英文的單引號(hào)則不會(huì)表示特殊的含義。

我們來看個(gè)例子來理解這段話的意思:

string:
  value1: Hello \n SpringBoot
  value2: 'Hello \n SpringBoot'
  value3: "Hello \n SpringBoot"
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/pro")
@RestController
public class PropertiesController {

    @Value("${string.value1}")
    private String value1;

    @Value("${string.value2}")
    private String value2;

    @Value("${string.value3}")
    private String value3;

    @RequestMapping("/getValue")
    public String getValue() {
        System.out.println(value1);
        System.out.println(value2);
        System.out.println(value3);
        return "OK";
    }
}

可以看到,不加引號(hào)的和加單引號(hào)的不會(huì)讓“\n”進(jìn)行換行,而加雙引號(hào)的依舊會(huì)讓"\n"進(jìn)行換行操作。

我們可以得出結(jié)論:

  • 字符串默認(rèn)不用加上單引號(hào)或雙引號(hào);
  • 單引號(hào)會(huì)轉(zhuǎn)義特殊字符,使其失去特殊功能,始終是一個(gè)普通的字符串;
  • 雙引號(hào)不會(huì)轉(zhuǎn)義字符串里面的特殊字符,特殊字符會(huì)表示本身的含義。

可能會(huì)有點(diǎn)繞,\n本義是換行

使用單引號(hào)會(huì)轉(zhuǎn)義,就是說不再換行了,\n只是一個(gè)普通的字符串;

使用雙引號(hào)不會(huì)轉(zhuǎn)義,就是說\n依舊是它本身的含義,即換行。

這里我們來了解一個(gè)新的注解:@PostConstruct

@PostConstruct

@PostConstruct可以標(biāo)注在方法上,被標(biāo)注的方法會(huì)在Spring容器完成Bean的實(shí)例化和依賴注入之后自動(dòng)執(zhí)行。所以我們這里可以偷個(gè)懶,后面的講解我們就使用這個(gè)注解來幫我們完成測試。

需要注意:

  • 用該注解修飾的方法必須是非靜態(tài)方法;
  • 不能有參數(shù);
  • 返回類型通常是void。

配置對象

yml配置文件不僅能配置一些基本的數(shù)據(jù)類型,還能配置對象。

寫法如下:

#配置對象
student:
  name: '張三'
  age: 18

也可以寫成行的形式:

#行的形式
student1: {name: '張三', age: 18}

那么這個(gè)時(shí)候我們就不能使用 @Value 注解來獲取配置中的對象了,需要使用另外一個(gè)注解@ConfigurationProperties 來讀取,如下:

package com.example.demo.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "student")//prefix表示前綴
public class Student {
    private String name;
    private int age;
}
@Controller
public class PropertiesController {
    @Autowired
    private Student student;

    @PostConstruct
    public void getStudent() {
        System.out.println(student);
    }
}

配置集合

ymp還可以配置集合。

配置格式:

在-后一定要加空格,否則-和后面的內(nèi)容就成了整體,統(tǒng)一賦值給對應(yīng)的屬性

type:
  list:
    - 'zhangsan'
    - 'lisi'
    - 'wangwu'
package com.example.demo.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Data
@Component
@ConfigurationProperties("type")
public class ListConfig {
    private List<String> list;

  }

   
@Controller
public class PropertiesController {

    @Autowired
    private ListConfig listConfig;

    @PostConstruct
    public void getList() {
        System.out.println(listConfig.toString());
    }
}

配置Map

package com.example.demo.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Map;

@Data
@Component
@ConfigurationProperties("maptypes")
public class MapConfig {
    private Map<String, String> map;
}
package com.example.demo.controller;

import com.example.demo.model.ListConfig;
import com.example.demo.model.MapConfig;
import com.example.demo.model.Student;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class PropertiesController {

    @Autowired
    private MapConfig mapConfig;

    @PostConstruct
    public void getMap() {
        System.out.println(mapConfig);
    }
}

yml配置文件的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 可讀性?,寫法簡單, 易于理解
  • 采用縮進(jìn)和嵌套來表示層次結(jié)構(gòu),適合非常復(fù)雜配置的管理
  • ?持更多的數(shù)據(jù)類型, 可以簡單表達(dá)對象, 數(shù)組, List,Map等數(shù)據(jù)形態(tài).
  • ?持更多的編程語?, 不?是Java中可以使?, 在Golang, Python, Ruby, JavaScript中也可以使?

缺點(diǎn)

  • 不適合寫復(fù)雜的配置?件
  • 對格式有較強(qiáng)的要求(?個(gè)空格可能會(huì)引起?場?案),對縮進(jìn)敏感

總結(jié)

什么是配置文件?

配置文件是用來存放應(yīng)用程序或者系統(tǒng)的配置的文件,可以在不動(dòng)源碼的情況下對應(yīng)用程序的性能和行為進(jìn)行調(diào)整,使用配置文件,可以使程序完成用戶和應(yīng)用程序的交互,或者應(yīng)用程序與其他應(yīng)用程序的交互。

SpringBoot的配置文件

Spring有三種配置文件:

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

application.properties 和 application.yml 是可以同時(shí)存在同一個(gè)項(xiàng)目中的,以application.properties為主,.properties的優(yōu)先級(jí)更高。

配置文件的格式

  •  application.properties:鍵值對形式,key和value用“=”隔開
  • application.yml:也是鍵值對,key和value用“冒號(hào)+空格”隔開。

讀取配置文件的方式

對于基本的數(shù)據(jù)類型,我們采用 @Value 注解即可,但對于對象、集合、map這些,我們需要使用 @ConfigurationProperties 。

@PostConstruct可以標(biāo)注在方法上,被標(biāo)注的方法會(huì)在Spring容器完成Bean的實(shí)例化和依賴注入之后自動(dòng)執(zhí)行。要求是:方法不能是靜態(tài)方法,不能有參數(shù),返回值盡量為void。

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

相關(guān)文章

  • springboot入門之profile設(shè)置方式

    springboot入門之profile設(shè)置方式

    這篇文章主要介紹了springboot入門?profile設(shè)置方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • SpringBoot找不到映射文件的處理方式

    SpringBoot找不到映射文件的處理方式

    這篇文章主要介紹了SpringBoot找不到映射文件的處理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • HttpClient的RedirectStrategy重定向處理核心機(jī)制

    HttpClient的RedirectStrategy重定向處理核心機(jī)制

    這篇文章主要為大家介紹了HttpClient的RedirectStrategy重定向處理核心機(jī)制源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • @RequestParam使用defaultValue屬性設(shè)置默認(rèn)值的操作

    @RequestParam使用defaultValue屬性設(shè)置默認(rèn)值的操作

    這篇文章主要介紹了@RequestParam使用defaultValue屬性設(shè)置默認(rèn)值的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java實(shí)現(xiàn)打字游戲小程序

    java實(shí)現(xiàn)打字游戲小程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)打字游戲小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn)代碼

    mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn)代碼

    這篇文章主要介紹了mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn),結(jié)合了mybatis-plus的插件方式,做出了自己的注解方式的數(shù)據(jù)權(quán)限,雖然可能存在一部分的局限性,但很好的解決了我們自己去解析SQL的功能,需要的朋友可以參考下
    2023-06-06
  • Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹

    Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹

    這篇文章主要介紹了Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹,本文用一個(gè)老師點(diǎn)名的現(xiàn)象描述了迭代模式的使用,需要的朋友可以參考下
    2015-03-03
  • 詳解Java中Object?類的使用

    詳解Java中Object?類的使用

    Java的Object?類是所有類的父類,也就是說?Java?的所有類都繼承了?Object,本文主要來和大家講講Object?類的使用,感興趣的可以了解一下
    2023-05-05
  • Java8新特性時(shí)間日期庫DateTime API及示例詳解

    Java8新特性時(shí)間日期庫DateTime API及示例詳解

    這篇文章主要介紹了Java8新特性時(shí)間日期庫DateTime API及示例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java Swing實(shí)現(xiàn)坦克大戰(zhàn)游戲

    Java Swing實(shí)現(xiàn)坦克大戰(zhàn)游戲

    這篇文章主要介紹了Java Swing實(shí)現(xiàn)坦克大戰(zhàn)游戲,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很大的幫助喲,需要的朋友可以參考下
    2021-05-05

最新評(píng)論