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

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è)可讀性?,寫法簡單、易于理解,它的語法和 JSON 語?類似。
  • yml ?持更多的數(shù)據(jù)類型,它可以簡單表達(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)、測試環(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)境為測試環(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如何強(qiáng)制刪除java程序占用的文件

    java如何強(qiáng)制刪除java程序占用的文件

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

    mybatisplus?實(shí)現(xiàn)接口MetaObjectHandler自動(dòng)填充字段值

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

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

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

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

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

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

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

    javax.servlet不存在的解決辦法

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

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

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

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

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

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

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

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

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

最新評(píng)論