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

Spring配置文件超詳細講解

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

什么是配置文件?

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

配置文件的作用

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

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

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

SpringBoot配置文件

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

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

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

SpringBoot中,內置了Tomcat服務器,默認端口號是8080,但在用戶電腦上8080端口號可能會被其他應用程序占用,此外,如果啟動多個SpringBoot項目,那么端口號也需要不同,所以SpringBoot需要支持讓用戶自定義端口號。

配置文件格式

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

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

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

當應?程序啟動時,SpringBoot會?動從classpath路徑找到并加載
application.properties 和 application.yaml 或者 application.yml ?件
,當然也可以使用 spring.config.name 指定文件路徑和名稱。

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

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

properties配置文件說明

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

properties基本語法

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

示例:

#配置項目端口號
server.port=9090
#配置數據庫連接信息
spring.datasource.url=jdbc:mysql://localhost:3306/beantext?characterEncoding=utf-8&useSSL=false
#配置數據庫用戶名
spring.datasource.username=root
#配置數據庫密碼
spring.datasource.password=root
#配置數據庫驅動
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

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

讀取配置文件

在項目中,如果我們想要讀取到配置文件中的內容,需要使用 @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缺點

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

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

my.text=你好 世界

為什么會這樣,我們可以打斷點看一下:

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

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

yml配置文件說明

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

yml基本語法

yml是樹形結構的配置文件,基本語法是:key: value(注意:冒號后面是有空格的,不能省略!?。?/strong>

key后+(冒號+空格

我們可以看到,正確的寫法的key是會有高亮提示的(橙色,當然應該可以設置成其他顏色),而對于錯誤的寫法,key還是灰色。

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

使用yml連接數據庫

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)出層級關系還能節(jié)省不必要的代碼

此外,yml還有其他操作。

yml配置不同數據類型及null

# 字符串
string.value: hello

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

# 整數類型
int.value: 10

# 浮點數
float.value: 3.14159

# Null  ~ 代表null
null.value: ~


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

那么yml配置文件的屬性應該如何獲???

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

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

 注意事項

字符串默認不用加上單引號或者雙引號,如果加英文的雙引號可以表示特殊的含義,而如果加英文的單引號則不會表示特殊的含義

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

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";
    }
}

可以看到,不加引號的和加單引號的不會讓“\n”進行換行,而加雙引號的依舊會讓"\n"進行換行操作。

我們可以得出結論:

  • 字符串默認不用加上單引號或雙引號;
  • 單引號會轉義特殊字符,使其失去特殊功能,始終是一個普通的字符串;
  • 雙引號不會轉義字符串里面的特殊字符,特殊字符會表示本身的含義

可能會有點繞,\n本義是換行

使用單引號會轉義,就是說不再換行了,\n只是一個普通的字符串;

使用雙引號不會轉義,就是說\n依舊是它本身的含義,即換行。

這里我們來了解一個新的注解:@PostConstruct

@PostConstruct

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

需要注意:

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

配置對象

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

寫法如下:

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

也可以寫成行的形式:

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

那么這個時候我們就不能使用 @Value 注解來獲取配置中的對象了,需要使用另外一個注解@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還可以配置集合。

配置格式:

在-后一定要加空格,否則-和后面的內容就成了整體,統(tǒ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)缺點

優(yōu)點

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

缺點

  • 不適合寫復雜的配置?件
  • 對格式有較強的要求(?個空格可能會引起?場?案),對縮進敏感

總結

什么是配置文件?

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

SpringBoot的配置文件

Spring有三種配置文件:

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

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

配置文件的格式

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

讀取配置文件的方式

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

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

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

相關文章

  • Java獲取上月份最后一天日期8位的示例代碼

    Java獲取上月份最后一天日期8位的示例代碼

    這篇文章主要介紹了Java獲取上月份最后一天日期8位,需要的朋友可以參考下
    2022-09-09
  • Java中過濾器 (Filter) 和 攔截器 (Interceptor)的使用

    Java中過濾器 (Filter) 和 攔截器 (Interceptor)的使用

    這篇文章主要介紹了Java中過濾器 (Filter) 和 攔截器 (Interceptor)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Spring Boot異常處理問題小結

    Spring Boot異常處理問題小結

    在 Spring Boot 中,異常處理是一個重要的部分,可以允許開發(fā)者優(yōu)雅地處理應用程序中可能發(fā)生的錯誤和異常,這篇文章主要介紹了Spring Boot異常處理問題小結,需要的朋友可以參考下
    2024-05-05
  • springboot中application.yml多環(huán)境生效規(guī)則說明

    springboot中application.yml多環(huán)境生效規(guī)則說明

    這篇文章主要介紹了springboot中application.yml多環(huán)境生效規(guī)則說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • springboot項目之相互依賴報錯問題(基于idea)

    springboot項目之相互依賴報錯問題(基于idea)

    這篇文章主要介紹了springboot項目之相互依賴報錯問題(基于idea),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 解決idea中maven新增的配置文件xx.xml沒生效問題

    解決idea中maven新增的配置文件xx.xml沒生效問題

    這篇文章主要介紹了如何解決idea中maven新增的配置文件xx.xml沒生效問題,公司項目有用自己的`私服,Maven正常去私服下載jar包是沒問題的,但阿里云鏡像找不到相關的jar包報錯,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • SpringBoot中的Shiro及環(huán)境搭建

    SpringBoot中的Shiro及環(huán)境搭建

    Apache Shiro是一個強大且靈活的開源安全框架,用于實現(xiàn)認證、授權、加密、會話管理和Web集成等安全功能,本文介紹了Shiro的概念、啟動步驟、Spring Boot整合Shiro的環(huán)境搭建、實現(xiàn)登錄攔截、用戶認證以及與MyBatis、Thymeleaf的整合方法,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • MyBatis實現(xiàn)表連接查詢寫法(三種對應關系)的方法總結

    MyBatis實現(xiàn)表連接查詢寫法(三種對應關系)的方法總結

    這篇文章主要介紹了MyBatis實現(xiàn)表連接查詢寫法(一對一關系、一對多關系、多對多關系)的方法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-01-01
  • SpringBoot中的事務處理問題

    SpringBoot中的事務處理問題

    這篇文章主要介紹了SpringBoot中的事務處理問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring 數據庫連接池(JDBC)詳解

    Spring 數據庫連接池(JDBC)詳解

    本篇文章主要介紹了基于Spring的JDBC基本框架搭建;基于Spring的JDBC增刪改查;讀取配置文件中的數據等,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05

最新評論

那坡县| 永年县| 台州市| 偏关县| 曲靖市| 商都县| 惠水县| 高安市| 黔东| 民丰县| 郎溪县| 墨竹工卡县| 黔东| 和林格尔县| 措勤县| 青田县| 社旗县| 洛川县| 吐鲁番市| 伽师县| 壶关县| 岳阳市| 田阳县| 黄大仙区| 乐清市| 彭泽县| 吉安县| 彭山县| 巍山| 吉木萨尔县| 石渠县| 嘉定区| 武川县| 广安市| 安仁县| 顺义区| 荔波县| 蚌埠市| 广元市| 鹿泉市| 寻乌县|