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

SpringBoot的配置文件(properties與yml)使用方法

 更新時(shí)間:2023年08月17日 11:39:36   作者:韻秋梧桐  
配置文件中的配置類型有兩類,一類是系統(tǒng)配置項(xiàng),這種配置的格式都是固定的,是給系統(tǒng)使用的,另一種是用戶自定義配置,用戶可以隨意地規(guī)定配置項(xiàng)的格式,又用戶自行去設(shè)置和讀取,這篇文章主要介紹了SpringBoot的配置文件(properties與yml)使用方法,需要的朋友可以參考下

1. 配置文件的作用

SpringBoot 項(xiàng)目中所有重要的數(shù)據(jù)都是在配置文件中配置的,比如∶

  • 數(shù)據(jù)庫的連接信息(包含用戶名和密碼的設(shè)置);
  • 項(xiàng)目的啟動(dòng)端口;
  • 第三方系統(tǒng)的調(diào)用秘鑰等信息;
  • 用于發(fā)現(xiàn)和定位問題的普通日志和異常日志;
  • 還可以自定義配置,如配置上傳文件的保存地址信息等。

想象一下如果沒有配置信息,那么 Spring Boot 項(xiàng)目就不能連接和操作數(shù)據(jù)庫,甚至是不能保存可以用于排查問題的關(guān)鍵日志,所以配置文件的作用是非常重要的。

配置文件中的配置類型有兩類,一類是系統(tǒng)配置項(xiàng),這種配置的格式都是固定的,是給系統(tǒng)(框架)使用的;另一種是用戶自定義配置,用戶可以隨意地規(guī)定配置項(xiàng)的格式,又用戶自行去設(shè)置和讀取。

2. 配置文件格式

SpringBoot 項(xiàng)目配置文件有兩種,一種是項(xiàng)目創(chuàng)建默認(rèn)自帶的的 properties 文件,還有一種比較新的 yml 文件(需要自己添加)。

配置文件是存在于 resources 目錄下的,對(duì)于 SpringBoot 項(xiàng)目默認(rèn)的配置文件,配置文件名必須是 application ,即 application.properties application.yml 文件,如果配置文件名不為 application 那就不能夠被識(shí)別加載。

img

properties 是可以和 yml ?起存在于?個(gè)項(xiàng)?當(dāng)中的, yml 文件相比于 properties 文件做了一些優(yōu)化,如 yml 文件天然支持中文字符,而 properties 文件默認(rèn)是不支持中文字符的,如果不進(jìn)行字符配置,輸入中文字符就會(huì)有亂碼現(xiàn)象。

當(dāng) application.properties application.yml 兩個(gè)文件共存時(shí), 雖然兩個(gè)文件中的配置都會(huì)被加載,但如果這兩個(gè)配置?件中出現(xiàn)了同樣的配置(比如 properties 和 yml 中都配置了“server.port” ), 那么這個(gè)時(shí)候會(huì)以 properties 中的配置為主,也就是 .properties 配置?件的優(yōu)先級(jí)最?。

雖然理論上來講 .properties 可以和 .yml 共存,但實(shí)際的業(yè)務(wù)當(dāng)中,我們通常會(huì)采取?種統(tǒng)?的配置?件格式,這樣可以更好的維護(hù)(降低故障率)。

3. 配置文件的使用方法

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

3.1. properties配置文件

3.1.1. 基本語法和使用

??基本語法:

properties 是以鍵值的形式配置的,key 和 value 之間是以“=”連接的, 使?“#”來添加注釋信息。

# key與=與value之間不要加空格
key=value

比如,設(shè)置端口號(hào),我們可以使用配置項(xiàng) server.port 來設(shè)置端口:

server.port=8088

配置修改完畢后,啟動(dòng)程序,就可以看到端口號(hào)已經(jīng)設(shè)置成配置文件中所設(shè)置的端口號(hào)了。

img

還有比如設(shè)置數(shù)據(jù)庫,配置項(xiàng)如下:

# 配置數(shù)據(jù)庫 URL
spring.datasource.url="jdbc:mysql://127.0.0.1:3306/tr?characterEncoding=utf8&useSSL=false"
# 配置數(shù)據(jù)庫 username
spring.datasource.name="root"
# 配置數(shù)據(jù)庫 password
spring.datasource.password="111111"
# 設(shè)置驅(qū)動(dòng)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

有關(guān)更多系統(tǒng)的配置,可以去看看官方文檔:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties

除了設(shè)置配置文件的信息除了系統(tǒng)的配置,我們還可以自定義配置,比如:

# 用戶自定義配置
custom.name=zhangsan
custom.id=666

??此時(shí)要讀取配置文件中的信息,我們可以使用 @Value 注解來實(shí)現(xiàn),規(guī)則如下:

// 要注意${}不能省略
@Value("${配置信息key}")
private String name;

示例代碼:

package com.example.springboot.controller;
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.ResponseBody;
@Controller
@ResponseBody
public class TestController2 {
    // 自定義配置和系統(tǒng)配置都可以讀取
    @Value("${custom.name}")
    private String name;
    @Value("${custom.id}")
    private String id;
    @Value("${server.port}")
    private String port;
    @RequestMapping("/coustom")
    public String sayHi() {
        return "name : " + name + " "
                + "id : " + id + " "
                + "port : " + port;
    }
}

瀏覽器訪問結(jié)果:

img

3.1.2. properties優(yōu)缺點(diǎn)分析

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

  • 配置文件結(jié)構(gòu)清晰:key=value,不容易出錯(cuò),適合初學(xué)者。

缺點(diǎn):

寫法上比較冗余,臃腫,yml 配置文件能夠解決這個(gè)問題。

img

3.2. yml配置文件

yml 是 YMAL(Yet Another Markup language)的縮寫,翻譯為另一種標(biāo)記語言

3.2.1. 基本語法與使用

??基本語法:

yml 是樹型結(jié)構(gòu)配置文件,特別需要注意的是 key 和 value 之間需要使用英文冒號(hào)加空格,空格一定是不能省略的。

# :后面空格一定不能省
key: value

此時(shí),將上面的 propertise 轉(zhuǎn)換成 yml 格式看一下。

# 配置端口
server:
  port: 8088
# 配置數(shù)據(jù)庫
spring:
  datasource:
    url: "jdbc:mysql://127.0.0.1:3306/tr?characterEncoding=utf8&useSSL=false"
    username: "root"
    password: "111111"
# 自定義配置信息
custom:
  name: zhangsan
  id: 666

這里讀取 yml 配置文件的方式和 properties 配置文件是一樣的,就不再演示了。

3.2.2. yml中單雙引號(hào)問題

我們嘗試將配置文件中的配置信息設(shè)置成如下字樣:

string:
 str1: Hello \n Spring Boot.
 str2: 'Hello \n Spring Boot.'
 str3: "Hello \n Spring Boot."

我們將這些配置信息注入到一個(gè)類,我們嘗試來讀取它們,這個(gè)代碼 @Controller 在 Spring Boot 啟動(dòng)時(shí)候會(huì)把 YmlString 對(duì)象注?到框架中,當(dāng)注?到框架中時(shí)會(huì)執(zhí)? @PostConstruct 初始化方法,就是此時(shí)讀到的配置信息。

@Controller
public class YmlString {
    @Value("${string.str1}")
    private String str1;
    @Value("${string.str2}")
    private String str2;
    @Value("${string.str3}")
    private String str3;
    @PostConstruct
     public void postConstruct() {
         System.out.println("string.str1:" + str1);
         System.out.println("string.str2:" + str2);
         System.out.println("string.str3:" + str3);
     }
}

控制臺(tái)輸出結(jié)果:

img

這就說明,被雙引號(hào)包裹的值,是按照原語義執(zhí)行的,而被單引號(hào)包裹值(特殊字符)會(huì)發(fā)生轉(zhuǎn)義,像上面的例子就是 \n 轉(zhuǎn)義成了 \\n ,所以就輸出了 \n ,最終就只是一個(gè)普通的字符串。

至于不加雙引號(hào)的輸出結(jié)果是因?yàn)?yml 中字符串默認(rèn)是不加引號(hào)的,就直接輸出了。

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

格式如下:

# 字符串
string.value: Hello
# 布爾值,true或false
boolean.value: true
boolean.value1: false
# 整數(shù)
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ?進(jìn)制
# 浮點(diǎn)數(shù)
float.value: 3.14159
float.value1: 314159e-5 # 科學(xué)計(jì)數(shù)法
# Null,~代表null
null.value: ~

使用:

package com.example.springboot.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class TestController3 {
    @Value("${string.value}")
    private String str;
    @Value("${boolean.value}")
    private boolean bool;
    @Value("${float.value}")
    private float flo;
    @Value("${null.value}")
    private Integer nul;
    @PostConstruct
    public void postConsrtuct() {
        System.out.println("str: " + str);
        System.out.println("bool: " + bool);
        System.out.println("flo: " + flo);
        System.out.println("nul: " + nul);
    }
}

運(yùn)行結(jié)果:

img

3.2.4. 配置對(duì)象

對(duì)于 ym l配置文件,還能進(jìn)行對(duì)象的配置,如設(shè)置一個(gè) Student 對(duì)象:

方式1:

student:
  id: 1
  name: 張三
  age: 18

方式2:

student: {id: 1,name: 張三,age: 18}

此時(shí)從配置文件讀取自定義的對(duì)象,就不可以使用 @Value 注解來讀取了,需要使用 @ConfigurationProperties 注解來進(jìn)行對(duì)象的讀取,并且對(duì)應(yīng)的類必須有 getter和setter 方法。

??示例:

學(xué)生類:

我們這里就不自己寫 getter和setter 方法了,我們使用 Lombok 框架中的 @Data 注解即可,其中就包含了get,set 和 toString,免去了手動(dòng)創(chuàng)建的步驟了。

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@ConfigurationProperties(prefix = "student")
@Component
public class Student {
    private int id;
    private String name;
    private int age;
}

使用類:

package com.example.springboot.controller;
import com.example.springboot.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import javax.annotation.PostConstruct;
@Controller
public class ConfigController {
    @Autowired
    private Student student;
    @PostConstruct
    public void postConsrtuct() {
        System.out.println(student);
    }
}

運(yùn)行結(jié)果:

img

3.2.5. 配置集合

yml 還能配置集合

??比如配置 list 集合,配置方式如下:

方式1:

dbtypes:
	name:
		- mysql
		- sqlserver
		- db2

方式2(推薦):

dbtypes: {name: [mysql, sqlserver, db2]}

獲取與對(duì)象的獲取方式一模一樣,只是現(xiàn)在需要類里面的一個(gè)屬性為集合對(duì)象。

獲取示例:

與配置文件對(duì)應(yīng)的對(duì)象。

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Data
@ConfigurationProperties(prefix = "dbtypes")
@Component
public class ConfigList {
    private List<String> name;
}

使用類:

package com.example.springboot.controller;
import com.example.springboot.model.ConfigList;
import org.springframework.stereotype.Controller;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@Controller
public class ConfigController {
    @Resource
    private ConfigList configList;
    @PostConstruct
    public void postConstruct() {
    	System.out.println(configList.getName());
    }
}

運(yùn)行結(jié)果:

img

??再比如配置 map 集合,配置方式如下:

方式1:

tes:
  map:
    1: 張三
    2: 李四

方式2:

tes:
  maps: {1: 張三,2: 李四}

獲取示例:

與配置文件對(duì)應(yīng)的對(duì)象:

package com.example.springboot.model;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Map;
@Data
@ConfigurationProperties(prefix = "tes")
@Component
public class ConfigMap {
    private Map<Integer, String> map;
}

使用類:

package com.example.springboot.controller;
import com.example.springboot.model.ConfigMap;
import org.springframework.stereotype.Controller;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@Controller
public class ConfigController2 {
    @Resource
    private ConfigMap configMap;
    @PostConstruct
    public void postConstruct() {
        System.out.println(configMap.toString());
    }
}

運(yùn)行結(jié)果:

img

3.2.6. yml優(yōu)點(diǎn)分析

  • yml 是?個(gè)可讀性?,寫法簡(jiǎn)單、易于理解,它的語法和 JSON 語?類似。
  • yml ?持更多的數(shù)據(jù)類型,它可以簡(jiǎn)單表達(dá)清單(數(shù)組)、散列表,標(biāo)量等數(shù)據(jù)形態(tài)。
  • 它使?空? 符號(hào)縮進(jìn)和?量依賴外觀的特?,特別適合?來表達(dá)或編輯數(shù)據(jù)結(jié)構(gòu)、各種配置?件等。
  • yml ?持更多的編程語?,它不?是 Java 中可以使?在 Golang、PHP、Python、Ruby、 JavaScript、Perl 中。

4. properties與yml的區(qū)別

  • 語法不同:properties 是 以key = value 的形式配置的鍵值類型的配置文件,而 yml 使用的是類似于 json 格式的樹型配置方式進(jìn)行配置的,yml 層級(jí)之間使用的是換行縮進(jìn)的方式配置的,key 和 value 之間使用英文冒號(hào):加空格的方式設(shè)置的,且空格不可省略。
  • properties 為早期并且默認(rèn)的配置文件格式,但配置存在一定的冗余數(shù)據(jù),使用 yml 可以很好的解決數(shù)據(jù)冗余問題。
  • yml 通用性更好,支持更多語言,如 Java、Go、Python,如果是云服務(wù)器開發(fā),可以使用一份 yml 配置文件作為 Java 和 Go 的共同配置文件。
  • yml 和 properties 可以共存,但一個(gè)項(xiàng)目中建議使用統(tǒng)一的配置類型文件。

yml 相較于 properties 支持更多的數(shù)據(jù)類型,如對(duì)象和集合。

5. 設(shè)置不同環(huán)境的配置文件

在日常開發(fā)中,通常會(huì)使用至少三個(gè)不同的環(huán)境:開發(fā)環(huán)境(dev)、測(cè)試環(huán)境(test)和生產(chǎn)環(huán)境(prod);每個(gè)環(huán)境的配置都不相同,包括數(shù)據(jù)庫、端口、IP 地址等信息;那么如何區(qū)分這些環(huán)境,如何打包呢?

Spring Boot 中提供了很好的多環(huán)境整合支持,可以在打包和運(yùn)行時(shí)自由切換不同的環(huán)境。

為了方便管理不同環(huán)境的配置,可以將它們放在不同的配置文件中,此時(shí)我們就需要?jiǎng)?chuàng)建不同環(huán)境的配置文件了,例如 application-dev.properties 、 application-test.properties application-prod.properties 。

需要注意的是,配置文件的命名必須遵循 application-name.properties application-name.yml 的格式,其中的 name 可以自定義,用于區(qū)分不同的環(huán)境。

因此,在整個(gè)項(xiàng)目中,需要有四個(gè)配置文件,包括 application.properties (主配置文件,是必須存在的)和三個(gè)不同環(huán)境的配置文件。

img

此時(shí)創(chuàng)建了各個(gè)環(huán)境的配置文件條件下,還需要告訴 SpringBoot 你要運(yùn)行哪個(gè)環(huán)境,主要有兩種指定方式。

??方式1:在主配置文件中指定

可以在主配置文件( application.properties 或者 application.yml )中指定,內(nèi)容如下:

# 指定運(yùn)行環(huán)境為測(cè)試環(huán)境(application.properties)
spring.profiles.active=test
# 指定運(yùn)行環(huán)境為生產(chǎn)環(huán)境(application.xml)
spring:
  profiles:
    active: pord

此時(shí),SpringBoot 首先默認(rèn)會(huì)加載application.properties文件,而這個(gè)的文件配置又告訴 SpringBoot 去找指定環(huán)境的配置文件。

??方式2:運(yùn)行 jar 的時(shí)候指定

SpringBoot 內(nèi)置的環(huán)境切換能夠在運(yùn)行Jar包的時(shí)候指定環(huán)境,命令如下:

java -jar xxx.jar --spring.profiles.active=test

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

相關(guān)文章

  • Java 阻塞隊(duì)列的7種類型小結(jié)

    Java 阻塞隊(duì)列的7種類型小結(jié)

    Java中的阻塞隊(duì)列是線程安全的隊(duì)列結(jié)構(gòu),包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、DelayQueue、SynchronousQueue、LinkedTransferQueue和LinkedBl,下面就來具體介紹一下,感興趣的可以了解一下
    2025-07-07
  • java獲取時(shí)間的方法總結(jié)

    java獲取時(shí)間的方法總結(jié)

    以下是對(duì)java中獲取時(shí)間的幾種方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • java基于spring boot本地上傳圖片示例解析

    java基于spring boot本地上傳圖片示例解析

    這篇文章主要介紹了java基于spring boot本地上傳圖片示例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot事務(wù)失效的八大原因及解決方案

    SpringBoot事務(wù)失效的八大原因及解決方案

    在 Spring Boot 項(xiàng)目開發(fā)中,聲明式事務(wù)管理通過 @Transactional 注解提供了極大的便利,但許多開發(fā)者都曾遇到過事務(wù)不生效的困擾,本文將詳細(xì)分析導(dǎo)致 Spring Boot 事務(wù)失效的八大常見情況,并提供相應(yīng)的解決方案,需要的朋友可以參考下
    2025-09-09
  • 淺談java安全編碼指南之堆污染

    淺談java安全編碼指南之堆污染

    什么是堆污染呢?是指當(dāng)參數(shù)化類型變量引用的對(duì)象不是該參數(shù)化類型的對(duì)象時(shí)而發(fā)生的。我們知道在JDK5中,引入了泛型的概念,在創(chuàng)建集合類的時(shí)候,指定該集合類中應(yīng)該存儲(chǔ)的對(duì)象類型。如果在指定類型的集合中,引用了不同的類型,那么這種情況就叫做堆污染。
    2021-06-06
  • 使用EasyExcel根據(jù)模板導(dǎo)出文件方式

    使用EasyExcel根據(jù)模板導(dǎo)出文件方式

    本文基于EasyExcel庫開發(fā)ExportUtil工具類,支持模板化導(dǎo)出、列表/離散數(shù)據(jù)填充、HTTP響應(yīng)自動(dòng)配置及異常統(tǒng)一處理,實(shí)現(xiàn)結(jié)構(gòu)化報(bào)表生成與文件下載功能
    2025-03-03
  • Mybatis Order by動(dòng)態(tài)參數(shù)防注入方式

    Mybatis Order by動(dòng)態(tài)參數(shù)防注入方式

    這篇文章主要介紹了Mybatis Order by動(dòng)態(tài)參數(shù)防注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Spring異常實(shí)現(xiàn)統(tǒng)一處理的方法

    Spring異常實(shí)現(xiàn)統(tǒng)一處理的方法

    這篇文章主要介紹了Spring異常實(shí)現(xiàn)統(tǒng)一處理的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • 新手小白入門必學(xué)JAVA面向?qū)ο笾鄳B(tài)

    新手小白入門必學(xué)JAVA面向?qū)ο笾鄳B(tài)

    說到多態(tài),一定離不開其它兩大特性:封裝和繼承,下面這篇文章主要給大家介紹了關(guān)于新手小白入門必學(xué)JAVA面向?qū)ο笾鄳B(tài)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Java中動(dòng)態(tài)地改變數(shù)組長(zhǎng)度及數(shù)組轉(zhuǎn)Map的代碼實(shí)例分享

    Java中動(dòng)態(tài)地改變數(shù)組長(zhǎng)度及數(shù)組轉(zhuǎn)Map的代碼實(shí)例分享

    這篇文章主要介紹了Java中動(dòng)態(tài)地改變數(shù)組長(zhǎng)度及數(shù)組轉(zhuǎn)map的代碼分享,其中轉(zhuǎn)Map利用到了java.util.Map接口,需要的朋友可以參考下
    2016-03-03

最新評(píng)論

青河县| 沙坪坝区| 新河县| 乡宁县| 德惠市| 伊川县| 克拉玛依市| 来安县| 阜城县| 昌吉市| 大渡口区| 永寿县| 山阳县| 金塔县| 洪雅县| 南华县| 新化县| 孟连| 旬阳县| 麻城市| 柳河县| 噶尔县| 呈贡县| 永和县| 枝江市| 榆林市| 富宁县| 富平县| 清新县| 岳普湖县| 本溪市| 五常市| 孝昌县| 文成县| 介休市| 泰州市| 福安市| 辽阳市| 普兰县| 武汉市| 沈阳市|