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

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

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

1. 配置文件的作用

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

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

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

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

2. 配置文件格式

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

配置文件是存在于 resources 目錄下的,對于 SpringBoot 項目默認的配置文件,配置文件名必須是 application ,即 application.properties application.yml 文件,如果配置文件名不為 application 那就不能夠被識別加載。

img

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

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

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

3. 配置文件的使用方法

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

3.1. properties配置文件

3.1.1. 基本語法和使用

??基本語法:

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

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

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

server.port=8088

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

img

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

# 配置數(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ū)動
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

??此時要讀取配置文件中的信息,我們可以使用 @Value 注解來實現(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)缺點分析

優(yōu)點:

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

缺點:

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

img

3.2. yml配置文件

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

3.2.1. 基本語法與使用

??基本語法:

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

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

此時,將上面的 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中單雙引號問題

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

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

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

@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);
     }
}

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

img

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

至于不加雙引號的輸出結(jié)果是因為 yml 中字符串默認是不加引號的,就直接輸出了。

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 # ?進制
# 浮點數(shù)
float.value: 3.14159
float.value1: 314159e-5 # 科學(xué)計數(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);
    }
}

運行結(jié)果:

img

3.2.4. 配置對象

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

方式1:

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

方式2:

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

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

??示例:

學(xué)生類:

我們這里就不自己寫 getter和setter 方法了,我們使用 Lombok 框架中的 @Data 注解即可,其中就包含了get,set 和 toString,免去了手動創(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);
    }
}

運行結(jié)果:

img

3.2.5. 配置集合

yml 還能配置集合

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

方式1:

dbtypes:
	name:
		- mysql
		- sqlserver
		- db2

方式2(推薦):

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

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

獲取示例:

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

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());
    }
}

運行結(jié)果:

img

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

方式1:

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

方式2:

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

獲取示例:

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

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());
    }
}

運行結(jié)果:

img

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

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

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

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

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

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

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

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

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

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

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

img

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

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

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

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

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

??方式2:運行 jar 的時候指定

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

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

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

相關(guān)文章

  • java如何強制刪除java程序占用的文件

    java如何強制刪除java程序占用的文件

    這篇文章主要介紹了java如何強制刪除java程序占用的文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • mybatisplus?實現(xiàn)接口MetaObjectHandler自動填充字段值

    mybatisplus?實現(xiàn)接口MetaObjectHandler自動填充字段值

    MetaObjectHandler是MyBatis-Plus提供的一個接口,本文主要介紹了mybatisplus?實現(xiàn)接口MetaObjectHandler自動填充字段值,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Java將RTF文檔轉(zhuǎn)換為Word/PDF/HTML/圖片

    Java將RTF文檔轉(zhuǎn)換為Word/PDF/HTML/圖片

    RTF文檔因其跨平臺兼容性而廣泛使用,但有時在不同的應(yīng)用場景可能需要特定的文檔格式,所以本文來講講如何通過Java將RTF轉(zhuǎn)換為Word/PDF/HTML和圖片格式
    2025-01-01
  • java中的Consumer、Supply如何實現(xiàn)多參數(shù)?

    java中的Consumer、Supply如何實現(xiàn)多參數(shù)?

    Java的Consumer接口只能接受一個參數(shù),但可以通過自定義接口、使用Tuple或嵌套結(jié)構(gòu)來實現(xiàn)對多個參數(shù)的處理,對于Supplier接口,它不能接受參數(shù),但可以通過自定義BiSupplier、結(jié)合Function或封裝參數(shù)為對象來實現(xiàn)對兩個參數(shù)并返回一個值的功能
    2024-11-11
  • java實現(xiàn)附件預(yù)覽(openoffice+swftools+flexpaper)實例

    java實現(xiàn)附件預(yù)覽(openoffice+swftools+flexpaper)實例

    本篇文章主要介紹了java實現(xiàn)附件預(yù)覽(openoffice+swftools+flexpaper)實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • javax.servlet不存在的解決辦法

    javax.servlet不存在的解決辦法

    今天在關(guān)于servlet的編譯中出現(xiàn)了一下小小的錯誤,發(fā)現(xiàn)javax.servlet不存在,本文就介紹一下解決方法,感興趣的可以了解一下
    2021-07-07
  • springboot接收日期字符串參數(shù)與返回日期字符串類型格式化

    springboot接收日期字符串參數(shù)與返回日期字符串類型格式化

    這篇文章主要介紹了springboot接收日期字符串參數(shù)與返回日期字符串類型格式化,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • vue數(shù)據(jù)響應(yīng)式原理重寫函數(shù)實現(xiàn)數(shù)組響應(yīng)式監(jiān)聽

    vue數(shù)據(jù)響應(yīng)式原理重寫函數(shù)實現(xiàn)數(shù)組響應(yīng)式監(jiān)聽

    Vue的通過數(shù)據(jù)劫持的方式實現(xiàn)數(shù)據(jù)的雙向綁定,即使用Object.defineProperty()來實現(xiàn)對屬性的劫持,但是Object.defineProperty()中的setter是無法直接實現(xiàn)數(shù)組中值的改變的劫持行為的,需要的朋友可以參考下
    2023-05-05
  • Java Resource路徑整理總結(jié)

    Java Resource路徑整理總結(jié)

    這篇文章主要介紹了 Java Resource路徑整理總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • java實現(xiàn)插入排序算法

    java實現(xiàn)插入排序算法

    插入排序算法是一個對少量元素進行排序的有效算法。插入排序的工作原理與打牌時整理手中的牌的做法類似,開始摸牌時,我們的左手是空的,接著一次從桌上摸起一張牌,并將它插入到左手的正確位置。
    2015-04-04

最新評論