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

SpringBoot如何配置文件properties和yml

 更新時(shí)間:2024年08月23日 10:44:33   作者:Salute-Y  
這篇文章主要介紹了SpringBoot如何配置文件properties和yml問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

配置文件的作用

通常情況下,一個(gè)項(xiàng)目中的一些重要信息都會(huì)放在配置文件中

比如:數(shù)據(jù)庫(kù)的連接信息、項(xiàng)目的啟動(dòng)端口、一些第三方的秘鑰、記錄信息的普通日志和異常日志等。

SprintBoot的配置文件(兩種)

Spring Boot的配置文件主要有兩種格式:

.properties和.yml

這兩種格式的配置文件可以共同存在于一個(gè)項(xiàng)目中,但一般情況下我們會(huì)統(tǒng)一格式,只使用其中的一種,來(lái)降低故障率。

.properties是最早期的SpringBoot配置文件的格式,也是現(xiàn)在默認(rèn)的配置文件格式,出現(xiàn)的時(shí)間早于.yml。

當(dāng)這兩個(gè)配置文件中出現(xiàn)相同的配置時(shí),會(huì)優(yōu)先執(zhí)行.properties中的配置,然后再執(zhí)行.yml中的配置,即.properties的優(yōu)先級(jí)大于.yml

properties

創(chuàng)建SpringBoot項(xiàng)目后會(huì)自動(dòng)生成一個(gè)配置文件,在該文件中,信息以鍵值對(duì)的形式進(jìn)行儲(chǔ)存。

# 配置項(xiàng)目的信息
# key=value
 server.port=8080
 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
 characterEncoding=utf8
 spring.datasource.username=root
 spring.datasource.password=root

如果我們想要在這個(gè)文件中配置一些信息,可以在遵循key-value格式下,可以定義任意名稱的key

缺點(diǎn):

對(duì)于同一個(gè)對(duì)象的多個(gè)屬性進(jìn)行設(shè)置時(shí)很麻煩,需要多次重復(fù),存在冗余配置項(xiàng)。

如下,當(dāng)我們想要設(shè)置同一個(gè)對(duì)象很多的信息時(shí),需要多次重復(fù)這個(gè)信息:

而yml就很好的解決了這個(gè)問(wèn)題。

yml

yml是YMAL的縮寫(xiě),全稱是 Yet Another Markup Language,另一種標(biāo)記語(yǔ)言。

YMAL是一個(gè)可讀性高、易于理解、用來(lái)表達(dá)數(shù)據(jù)序列化的格式。

YMAL的作用是可以做到跨語(yǔ)言使用,不僅Java中可以使用,Go和python中都可以使用。

1.語(yǔ)法格式:

  • key: value表示鍵值對(duì)關(guān)系,冒號(hào)后面必須加一個(gè)空格
  • 大小寫(xiě)敏感
  • 縮進(jìn)時(shí)不允許使用tab鍵,只能用空格
  • 左對(duì)齊的一列數(shù)據(jù)就表示同一級(jí)
  • 松散表示,java使用駝峰命名,而用原名或者-代替都可以正確映射,比如java中的名稱是lastName,yml中使用lastName或者last-name都可以映射到。

2.鍵值關(guān)系

#  通常寫(xiě)法:
 student: 
      id: 1
      name: 張三
      age: 20


# 行內(nèi)寫(xiě)法
 student: { id: 1,name: 張三, age: 20}
 

yml中,字符串默認(rèn)不需要加上單引號(hào)或者雙引號(hào)

  • 使用雙引號(hào):不會(huì)轉(zhuǎn)義字符串中的特殊字符,特殊字符會(huì)作為本身想要表達(dá)的意思:比如 name: “zhangsan \n 23”,會(huì)輸出:zhangsan 換行 23
  • 使用單引號(hào):會(huì)轉(zhuǎn)義特殊字符,特殊字符失去特殊作用變成普通字符。

在配置文件中,它是以鍵值對(duì)的形式儲(chǔ)存信息的,如果是自己配置的信息,你可以在遵循key-value的格式下,定義任何名稱的key.

使用YML連接數(shù)據(jù)庫(kù):

sping:
  datasource:
    url:jdbc: mysql://127.0.0.0:3306/dbname?characterEncoding=tuf8
    username: root
    password: root

表示常用的字面量:

# 普通字面量
name: zhangsan
age: 18

#布爾類(lèi)型
flag: true

#日期
date: 2022/04/15

# 同一個(gè)對(duì)象的多個(gè)屬性
people:
      name: lisi
      age: 20
# 數(shù)組
# 用 -表示數(shù)組中的一個(gè)元素
pets:
   - cat
   - dog
   - pig
# 行內(nèi)寫(xiě)法
petss: [dog,cat,pig]

# list對(duì)象、set對(duì)象、數(shù)組對(duì)象
students:
      - name: zhangsan
        age: 22
      - name: lisi
        age: 20
      - {name: wangwu,age: 18}
      

讀取配置文件的方法:

@Value注解讀取單個(gè)配置項(xiàng)

如果我們想要主動(dòng)的讀取配置文件中的信息,可以使用注解@Value。

使用格式:

 @Value("${server.port}")
   private String port;

在屬性前加上@Value注解,后面的括號(hào)寫(xiě)入要讀取的配置中哪個(gè)key,比如讀取下面的server.port,注意格式:雙引號(hào)+${}

# 配置項(xiàng)目端口
 server.port=8080

在測(cè)試類(lèi)中得到這個(gè)值并進(jìn)行打?。?/p>

package com.example.demo;

import Controller.TestReadYml;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication implements InitializingBean {


    @Value("${server.port}")
    private String port;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class,args);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("  ");
        System.out.println("讀取到信息:"+port);
        System.out.println("  ");
    }
}

輸入:

@ConfigurationProperties讀取實(shí)體類(lèi)

1.將配置文件中的一組對(duì)象映射到實(shí)體類(lèi)上:

使用格式:

@Component //spring 啟動(dòng)時(shí)直接將配置文件映射到當(dāng)前類(lèi)屬性上
@ConfigurationProperties("student") //student是在配置好的key

舉例:

在yml配置文件中,我們創(chuàng)建一個(gè)student對(duì)象:

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

將這個(gè)對(duì)象映射到Student類(lèi)中,也就是從配置文件里讀取到類(lèi)中,

package model;

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

@Component //spring 啟動(dòng)時(shí)直接將配置文件映射到當(dāng)前類(lèi)屬性上
@ConfigurationProperties("student")
public class Student {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

2.使用注入的方式將對(duì)象注入到一個(gè)類(lèi)中

在啟動(dòng)類(lèi)中注入Student類(lèi)進(jìn)行使用:

package com.example.demo;

import com.example.demo.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
@SpringBootApplication
@Component
public class DemoApplication {


    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class,args);
    }

    //屬性注入
    @Autowired
    private Student student;
    @PostConstruct
    private void postConstruct(){
        System.out.println("Read Yml:"+student);
    }
}

輸出:

Read Yml:Student{id=1, name='張三', age=20}

注意包路徑配置的問(wèn)題!?。?/p>

啟動(dòng)類(lèi)和要注入的類(lèi)包必須放在同級(jí)目錄下,否則讀取不到,會(huì)顯示啟動(dòng)失敗Application failed to start.

properties VS yml 總結(jié)

  • yml語(yǔ)法更簡(jiǎn)潔,可以解決數(shù)據(jù)冗余問(wèn)題
  • yml跨語(yǔ)言的通用性更好,它不支持java語(yǔ)言還支持golang 和python
  • yml 支持更多的數(shù)據(jù)類(lèi)型
  • yml格式的配置文件在寫(xiě)的時(shí)候更容易出錯(cuò)(冒號(hào)后面需要加一個(gè)空格),而properties雖然寫(xiě)法更復(fù)雜但是不容易出錯(cuò)。
  • yml雖然可以和properties共存,但一個(gè)項(xiàng)目中最好統(tǒng)一格式,只用其中的一個(gè)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 4個(gè)Java8中你需要知道的函數(shù)式接口分享

    4個(gè)Java8中你需要知道的函數(shù)式接口分享

    Java?8?中提供了許多函數(shù)式接口,包括Function、Consumer、Supplier、Predicate?等等。本文主要來(lái)和大家介紹一下它們的具體使用,需要的可以參考一下
    2023-04-04
  • 解析Java格式字符串的使用

    解析Java格式字符串的使用

    本文通過(guò)實(shí)例給大家介紹了java格式字符串的使用,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-02-02
  • 深入理解Java設(shè)計(jì)模式之模板方法模式

    深入理解Java設(shè)計(jì)模式之模板方法模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之模板方法模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2021-11-11
  • java在linux系統(tǒng)下開(kāi)機(jī)啟動(dòng)無(wú)法使用sudo命令的原因及解決辦法

    java在linux系統(tǒng)下開(kāi)機(jī)啟動(dòng)無(wú)法使用sudo命令的原因及解決辦法

    每次開(kāi)機(jī)自動(dòng)啟動(dòng)的java進(jìn)程,頁(yè)面上的關(guān)機(jī)按鈕都無(wú)法實(shí)現(xiàn)關(guān)機(jī)功能,但是此時(shí)如果以chb賬號(hào)通過(guò)ssh登錄該服務(wù)器,手動(dòng)殺掉tomcat進(jìn)程,然后再重新啟動(dòng)tomcat,頁(yè)面上的關(guān)機(jī)按鈕就有效了
    2013-08-08
  • Dubbo本地調(diào)試的幾種方式總結(jié)

    Dubbo本地調(diào)試的幾種方式總結(jié)

    dubbo服務(wù)方啟動(dòng)時(shí)需要加載的東西太多,如果跑單元測(cè)試把服務(wù)開(kāi)啟會(huì)浪費(fèi)不少時(shí)間,而且單元測(cè)試沒(méi)法保持服務(wù)一直開(kāi)啟的狀態(tài),這篇文章主要給大家介紹了關(guān)于Dubbo本地調(diào)試的幾種方式,需要的朋友可以參考下
    2022-11-11
  • java中類(lèi)之間的數(shù)據(jù)傳遞方式

    java中類(lèi)之間的數(shù)據(jù)傳遞方式

    這篇文章主要介紹了java中類(lèi)之間的數(shù)據(jù)傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級(jí)隊(duì)列(PriorityQueue)用法詳解

    Java數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級(jí)隊(duì)列(PriorityQueue)用法詳解

    優(yōu)先級(jí)隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),操作的數(shù)據(jù)帶有優(yōu)先級(jí),這種數(shù)據(jù)結(jié)構(gòu)就是優(yōu)先級(jí)隊(duì)列(PriorityQueue)。本文將詳細(xì)講講Java優(yōu)先級(jí)隊(duì)列的用法,感興趣的可以了解一下
    2022-07-07
  • Java?String相加底層原理分析

    Java?String相加底層原理分析

    這篇文章主要介紹了Java?String相加底層原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java手動(dòng)方式創(chuàng)建枚舉類(lèi)示例

    Java手動(dòng)方式創(chuàng)建枚舉類(lèi)示例

    這篇文章主要介紹了Java手動(dòng)方式創(chuàng)建枚舉類(lèi),結(jié)合實(shí)例形式分析了java創(chuàng)建枚舉類(lèi)的方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • Spring Boot 約定大于配置之如何實(shí)現(xiàn)自定義配置

    Spring Boot 約定大于配置之如何實(shí)現(xiàn)自定義配置

    本文介紹了SpringBoot的“約定大于配置”理念以及如何實(shí)現(xiàn)自定義配置,通過(guò)實(shí)現(xiàn)接口和添加@Configuration注解,開(kāi)發(fā)者可以靈活地?cái)U(kuò)展和定制SpringBoot的默認(rèn)行為,感興趣的朋友一起看看吧
    2025-03-03

最新評(píng)論