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

SpringBoot多環(huán)境開發(fā)與日志小結

 更新時間:2022年08月16日 15:46:51   作者:十八歲討厭編程  
這篇文章主要介紹了SpringBoot多環(huán)境開發(fā)與日志,下面給大家說一下如何基于多環(huán)境開發(fā)做配置獨立管理,務必掌握,需要的朋友可以參考下

前置導入

什么是多環(huán)境?其實就是說你的電腦上寫的程序最終要放到別人的服務器上去運行。每個計算機環(huán)境不一樣,這就是多環(huán)境。常見的多環(huán)境開發(fā)主要兼顧3種環(huán)境設置,開發(fā)環(huán)境——自己用的,測試環(huán)境——自己公司用的,生產(chǎn)環(huán)境——甲方爸爸用的。因為這是絕對不同的三臺電腦,所以環(huán)境肯定有所不同,比如連接的數(shù)據(jù)庫不一樣,設置的訪問端口不一樣等等。

多環(huán)境開發(fā)(yaml單一文件版)

那什么是多環(huán)境開發(fā)?就是針對不同的環(huán)境設置不同的配置屬性即可。比如你自己開發(fā)時,配置你的端口如下:

server:
  port: 80

? 如何想設計兩組環(huán)境呢?中間使用三個減號分隔開

server:
  port: 80
---
server:
  port: 81

? 如何區(qū)分兩種環(huán)境呢?起名字唄

spring:
	profiles: pro
server:
	port: 80
---
spring:
	profiles: dev
server:
	port: 81

? 那用哪一個呢?設置默認啟動哪個就可以了

spring:
	profiles:
		active: pro		# 啟動pro
---
spring:
	profiles: pro
server:
	port: 80
---
spring:
	profiles: dev
server:
	port: 81

? 就這么簡單,再多來一組環(huán)境也OK

spring:
	profiles:
		active: pro		# 啟動pro
---
spring:
	profiles: pro
server:
	port: 80
---
spring:
	profiles: dev
server:
	port: 81
---
spring:
	profiles: test
server:
	port: 82

? 其中關于環(huán)境名稱定義上述格式是過時格式,標準格式如下

spring:
	config:
    	activate:
        	on-profile: pro

總結

  • 多環(huán)境開發(fā)需要設置若干種常用環(huán)境,例如開發(fā)、生產(chǎn)、測試環(huán)境
  • yaml格式中設置多環(huán)境使用—區(qū)分環(huán)境設置邊界
  • 每種環(huán)境的區(qū)別在于加載的配置屬性不同
  • 啟用某種環(huán)境時需要指定啟動時使用該環(huán)境

多環(huán)境開發(fā)(yaml多文件版)

將所有的配置都放在一個配置文件中,尤其是每一個配置應用場景都不一樣,這顯然不合理,于是就有了將一個配置文件拆分成多個配置文件的想法。拆分后,每個配置文件中寫自己的配置,主配置文件中寫清楚用哪一個配置文件就好了。

主配置文件

spring:
	profiles:
		active: pro		# 啟動pro

環(huán)境配置文件

server:
	port: 80

? 環(huán)境配置文件因為每一個都是配置自己的項,所以連名字都不用寫里面了。那問題是如何區(qū)分這是哪一組配置呢?使用文件名區(qū)分。

application-pro.yaml

server:
	port: 80

application-dev.yaml

server:
	port: 81

? 文件的命名規(guī)則為:application-環(huán)境名.yml

上圖中的application.yml就是我們說的主配置文件,其他的都是環(huán)境配置文件。

? 在配置文件中,如果某些配置項所有環(huán)境都一樣,可以將這些項寫入到主配置中,只有哪些有區(qū)別的項才寫入到環(huán)境配置文件中。

  • 主配置文件中設置公共配置(全局)
  • 環(huán)境分類配置文件中常用于設置沖突屬性(局部)

總結

  • 可以使用獨立配置文件定義環(huán)境屬性
  • 獨立配置文件便于線上系統(tǒng)維護更新并保障系統(tǒng)安全性

多環(huán)境開發(fā)(properties多文件版)

SpringBoot最早期提供的配置文件格式是properties格式的,這種格式的多環(huán)境配置也可以了解一下。

主配置文件

spring.profiles.active=pro

環(huán)境配置文件

application-pro.properties

server.port=80

application-dev.properties

server.port=81

? 文件的命名規(guī)則為:application-環(huán)境名.properties

總結

properties文件多環(huán)境配置僅支持多文件格式 多環(huán)境開發(fā)獨立配置文件書寫技巧

? 作為程序員在搞配置的時候往往處于一種分久必合合久必分的局面。開始先寫一起,后來為了方便維護就拆分。對于多環(huán)境開發(fā)也是如此,下面給大家說一下如何基于多環(huán)境開發(fā)做配置獨立管理,務必掌握。

準備工作

? 將所有的配置根據(jù)功能對配置文件中的信息進行拆分,并制作成獨立的配置文件,命名規(guī)則如下

  • application-devDB.yml
  • application-devRedis.yml
  • application-devMVC.yml

使用

? 使用include屬性在激活指定環(huán)境的情況下,同時對多個環(huán)境進行加載使其生效,多個環(huán)境間使用逗號分隔

spring:
	profiles:
    	active: dev
        include: devDB,devRedis,devMVC

? 比較一下,現(xiàn)在相當于加載dev配置時,再加載對應的3組配置,從結構上就很清晰,用了什么,對應的名稱是什么

注意

? 當主環(huán)境dev與其他環(huán)境有相同屬性時,主環(huán)境屬性生效;其他環(huán)境中有相同屬性時,最后加載的環(huán)境屬性生效

改良

? 但是上面的設置也有一個問題,比如我要切換dev環(huán)境為pro時,include也要修改。因為include屬性只能使用一次,這就比較麻煩了。SpringBoot從2.4版開始使用group屬性替代include屬性,降低了配置書寫量。簡單說就是我先寫好,你愛用哪個用哪個。

spring:
	profiles:
    	active: dev
        group:
        	"dev": devDB,devRedis,devMVC
      		"pro": proDB,proRedis,proMVC
      		"test": testDB,testRedis,testMVC

? 現(xiàn)在再來看,如果切換dev到pro,只需要改一下是不是就結束了?完美!

總結

  1. 多環(huán)境開發(fā)使用group屬性設置配置文件分組,便于線上維護管理 多環(huán)境開發(fā)控制

最后說一個沖突問題。就是maven和SpringBoot同時設置多環(huán)境的話怎么搞。

? 要想處理這個沖突問題,你要先理清一個關系,究竟誰在多環(huán)境開發(fā)中其主導地位。也就是說如果現(xiàn)在都設置了多環(huán)境,誰的應該是保留下來的,另一個應該遵從相同的設置。

? maven是做什么的?項目構建管理的,最終生成代碼包的,SpringBoot是干什么的?簡化開發(fā)的。簡化,又不是其主導作用。最終還是要靠maven來管理整個工程,所以SpringBoot應該聽maven的。整個確認后下面就好做了。大體思想如下:

  • 先在maven環(huán)境中設置用什么具體的環(huán)境
  • 在SpringBoot中讀取maven設置的環(huán)境即可

maven中設置多環(huán)境(使用屬性方式區(qū)分環(huán)境)

<profiles>
    <profile>
        <id>env_dev</id>
        <properties>
            <profile.active>dev</profile.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>		<!--默認啟動環(huán)境-->
        </activation>
    </profile>
    <profile>
        <id>env_pro</id>
        <properties>
            <profile.active>pro</profile.active>
        </properties>
    </profile>
</profiles>

SpringBoot中讀取maven設置值

spring:
	profiles:
    	active: @profile.active@

? 上面的@屬性名@就是讀取maven中配置的屬性值的語法格式。

總結

  • 當Maven與SpringBoot同時對多環(huán)境進行控制時,以Maven為主,SpringBoot使用@…@占位符讀取Maven對應的配置屬性值
  • 基于SpringBoot讀取Maven配置屬性的前提下,如果在Idea下測試工程時pom.xml每次更新需要手動compile方可生效(此問題在IDEA21、22版本已經(jīng)得到解決)

日志前導

日志其實就是記錄程序日常運行的信息,主要作用如下:

  • 編程期調試代碼
  • 運營期記錄信息
  • 記錄日常運營重要信息(峰值流量、平均響應時長……)
  • 記錄應用報錯信息(錯誤堆棧)
  • 記錄運維過程數(shù)據(jù)(擴容、宕機、報警……)

日志的使用格式非常固定,直接上操作步驟:

步驟①:添加日志記錄操作

@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
    private static final Logger log = LoggerFactory.getLogger(BookController.class);
    @GetMapping
    public String getById(){
        log.debug("debug...");
        log.info("info...");
        log.warn("warn...");
        log.error("error...");
        return "springboot is running...2";
    }
}

? 上述代碼中l(wèi)og對象就是用來記錄日志的對象,下面的log.debug,log.info這些操作就是寫日志的API了。

結果:

默認的我們的系統(tǒng)在啟動起來的時候,日志級別是info級別,所以這里我們只能看到info以及其上的日志信息

步驟②:設置日志輸出級別

? 日志設置好以后可以根據(jù)設置選擇哪些參與記錄。這里是根據(jù)日志的級別來設置的。日志的級別分為6種,分別是:

  • TRACE:運行堆棧信息,使用率低
  • DEBUG:程序員調試代碼使用
  • INFO:記錄運維過程數(shù)據(jù)
  • WARN:記錄運維過程報警數(shù)據(jù)
  • ERROR:記錄錯誤堆棧信息
  • FATAL:災難信息,合并計入ERROR

? 一般情況下,開發(fā)時候使用DEBUG,上線后使用INFO,運維信息記錄使用WARN即可。下面就設置一下日志級別:

# 開啟debug模式,輸出調試信息,常用于檢查系統(tǒng)運行狀況
debug: true

在開啟了debug模式之后我們在開啟項目的時候會有大篇幅的文字,這個模式我們一般在項目上線之后的檢測才會使用到。

? 這么設置太簡單粗暴了,日志系統(tǒng)通常都提供了細粒度的控制

# 開啟debug模式,輸出調試信息,常用于檢查系統(tǒng)運行狀況
debug: true

# 設置日志級別,root表示根節(jié)點,即整體應用日志級別
logging:
	level:
    	root: debug

我們設置成debug級別之后,再運行就可以看到:

? 還可以再設置更細粒度的控制(例如我們不想看框架里面的debug日志)

步驟③:設置日志組,控制指定包對應的日志輸出級別,也可以直接控制指定包對應的日志輸出級別

logging:
	# 設置日志組
    group:
    	# 自定義組名,設置當前組中所包含的包
        ebank: com.nefu.controller,com.nefu.service
    level:
    	root: warn
        # 為對應組設置日志級別
        ebank: debug
    	# 為對包設置日志級別
        com.nefu.controller: debug

? 說白了就是總體設置一下,每個包設置一下,如果感覺設置的麻煩,就先把包分個組,對組設置。

總結

  • 日志用于記錄開發(fā)調試與運維過程消息
  • 日志的級別共6種,通常使用4種即可,分別是DEBUG,INFO,WARN,ERROR
  • 可以通過日志組或代碼包的形式進行日志顯示級別的控制

寫代碼的時候每個類都要寫創(chuàng)建日志記錄對象,這個可以優(yōu)化一下,使用前面用過的lombok技術給我們提供的工具類即可。

@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
    private static final Logger log = LoggerFactory.getLogger(BookController.class);	//這一句可以不寫了
}

? 導入lombok后使用注解搞定,日志對象名為log

@Slf4j		//這個注解替代了下面那一行
@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
    private static final Logger log = LoggerFactory.getLogger(BookController.class);	//這一句可以不寫了
}

日志輸出格式控制

日志已經(jīng)能夠記錄了,但是目前記錄的格式是SpringBoot給我們提供的,如果想自定義控制就需要自己設置了。先分析一下當前日志的記錄格式。

  • PID:進程ID,用于表明當前操作所處的進程,當多服務同時記錄日志時,該值可用于協(xié)助程序員調試程序。
  • 所屬類/接口名:當前顯示信息為SpringBoot重寫后的信息,名稱過長時,簡化包名書寫為首字母,甚至直接刪除。

? 對于單條日志信息來說,日期,觸發(fā)位置,記錄信息是最核心的信息。級別用于做篩選過濾,PID與線程名用于做精準分析。了解這些信息后就可以DIY日志格式了。

模擬的官方日志模板的書寫格式:

logging:
	pattern:
    	console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"

日志文件

日志信息顯示,記錄已經(jīng)控制住了,下面就要說一下日志的轉存了。日志不能僅顯示在控制臺上,要把日志記錄到文件中,方便后期維護查閱。

? 對于日志文件的使用存在各種各樣的策略,例如每日記錄,分類記錄,報警后記錄等。這里主要研究日志文件如何記錄。

? 記錄日志到文件中格式非常簡單,設置日志文件名即可。

logging:
	file:
    	name: server.log

? 雖然使用上述格式可以將日志記錄下來了,但是面對線上的復雜情況,一個文件記錄肯定是不能夠滿足運維要求的,通常會每天記錄日志文件,同時為了便于維護,還要限制每個日志文件的大小。下面給出日志文件的常用配置方式:

logging:
	logback:
    	rollingpolicy:   #代表日志的滾動
        	max-file-size: 3KB   #文件大小限度
            file-name-pattern: server.%d{yyyy-MM-dd}.%i.log   #滾動日志的文件名怎么啟

? 以上格式是基于logback日志技術設置每日日志文件的設置格式,要求容量到達3KB以后就轉存信息到第二個文件中。文件命名規(guī)則中的%d標識日期,%i是一個遞增變量,用于區(qū)分日志文件。

到此這篇關于SpringBoot多環(huán)境開發(fā)與日志的文章就介紹到這了,更多相關SpringBoot多環(huán)境開發(fā)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論