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

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

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

前置導(dǎo)入

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

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

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

server:
  port: 80

? 如何想設(shè)計(jì)兩組環(huán)境呢?中間使用三個(gè)減號(hào)分隔開(kāi)

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

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

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

? 那用哪一個(gè)呢?設(shè)置默認(rèn)啟動(dòng)哪個(gè)就可以了

spring:
	profiles:
		active: pro		# 啟動(dòng)pro
---
spring:
	profiles: pro
server:
	port: 80
---
spring:
	profiles: dev
server:
	port: 81

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

spring:
	profiles:
		active: pro		# 啟動(dòng)pro
---
spring:
	profiles: pro
server:
	port: 80
---
spring:
	profiles: dev
server:
	port: 81
---
spring:
	profiles: test
server:
	port: 82

? 其中關(guān)于環(huán)境名稱(chēng)定義上述格式是過(guò)時(shí)格式,標(biāo)準(zhǔn)格式如下

spring:
	config:
    	activate:
        	on-profile: pro

總結(jié)

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

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

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

主配置文件

spring:
	profiles:
		active: pro		# 啟動(dòng)pro

環(huán)境配置文件

server:
	port: 80

? 環(huán)境配置文件因?yàn)槊恳粋€(gè)都是配置自己的項(xiàng),所以連名字都不用寫(xiě)里面了。那問(wèn)題是如何區(qū)分這是哪一組配置呢?使用文件名區(qū)分。

application-pro.yaml

server:
	port: 80

application-dev.yaml

server:
	port: 81

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

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

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

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

總結(jié)

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

多環(huán)境開(kāi)發(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

總結(jié)

properties文件多環(huán)境配置僅支持多文件格式 多環(huán)境開(kāi)發(fā)獨(dú)立配置文件書(shū)寫(xiě)技巧

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

準(zhǔn)備工作

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

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

使用

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

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

? 比較一下,現(xiàn)在相當(dāng)于加載dev配置時(shí),再加載對(duì)應(yīng)的3組配置,從結(jié)構(gòu)上就很清晰,用了什么,對(duì)應(yīng)的名稱(chēng)是什么

注意

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

改良

? 但是上面的設(shè)置也有一個(gè)問(wèn)題,比如我要切換dev環(huán)境為pro時(shí),include也要修改。因?yàn)閕nclude屬性只能使用一次,這就比較麻煩了。SpringBoot從2.4版開(kāi)始使用group屬性替代include屬性,降低了配置書(shū)寫(xiě)量。簡(jiǎn)單說(shuō)就是我先寫(xiě)好,你愛(ài)用哪個(gè)用哪個(gè)。

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

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

總結(jié)

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

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

? 要想處理這個(gè)沖突問(wèn)題,你要先理清一個(gè)關(guān)系,究竟誰(shuí)在多環(huán)境開(kāi)發(fā)中其主導(dǎo)地位。也就是說(shuō)如果現(xiàn)在都設(shè)置了多環(huán)境,誰(shuí)的應(yīng)該是保留下來(lái)的,另一個(gè)應(yīng)該遵從相同的設(shè)置。

? maven是做什么的?項(xiàng)目構(gòu)建管理的,最終生成代碼包的,SpringBoot是干什么的?簡(jiǎn)化開(kāi)發(fā)的。簡(jiǎn)化,又不是其主導(dǎo)作用。最終還是要靠maven來(lái)管理整個(gè)工程,所以SpringBoot應(yīng)該聽(tīng)maven的。整個(gè)確認(rèn)后下面就好做了。大體思想如下:

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

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

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

SpringBoot中讀取maven設(shè)置值

spring:
	profiles:
    	active: @profile.active@

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

總結(jié)

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

日志前導(dǎo)

日志其實(shí)就是記錄程序日常運(yùn)行的信息,主要作用如下:

  • 編程期調(diào)試代碼
  • 運(yùn)營(yíng)期記錄信息
  • 記錄日常運(yùn)營(yíng)重要信息(峰值流量、平均響應(yīng)時(shí)長(zhǎng)……)
  • 記錄應(yīng)用報(bào)錯(cuò)信息(錯(cuò)誤堆棧)
  • 記錄運(yùn)維過(guò)程數(shù)據(jù)(擴(kuò)容、宕機(jī)、報(bào)警……)

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

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

@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對(duì)象就是用來(lái)記錄日志的對(duì)象,下面的log.debug,log.info這些操作就是寫(xiě)日志的API了。

結(jié)果:

默認(rèn)的我們的系統(tǒng)在啟動(dòng)起來(lái)的時(shí)候,日志級(jí)別是info級(jí)別,所以這里我們只能看到info以及其上的日志信息

步驟②:設(shè)置日志輸出級(jí)別

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

  • TRACE:運(yùn)行堆棧信息,使用率低
  • DEBUG:程序員調(diào)試代碼使用
  • INFO:記錄運(yùn)維過(guò)程數(shù)據(jù)
  • WARN:記錄運(yùn)維過(guò)程報(bào)警數(shù)據(jù)
  • ERROR:記錄錯(cuò)誤堆棧信息
  • FATAL:災(zāi)難信息,合并計(jì)入ERROR

? 一般情況下,開(kāi)發(fā)時(shí)候使用DEBUG,上線(xiàn)后使用INFO,運(yùn)維信息記錄使用WARN即可。下面就設(shè)置一下日志級(jí)別:

# 開(kāi)啟debug模式,輸出調(diào)試信息,常用于檢查系統(tǒng)運(yùn)行狀況
debug: true

在開(kāi)啟了debug模式之后我們?cè)陂_(kāi)啟項(xiàng)目的時(shí)候會(huì)有大篇幅的文字,這個(gè)模式我們一般在項(xiàng)目上線(xiàn)之后的檢測(cè)才會(huì)使用到。

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

# 開(kāi)啟debug模式,輸出調(diào)試信息,常用于檢查系統(tǒng)運(yùn)行狀況
debug: true

# 設(shè)置日志級(jí)別,root表示根節(jié)點(diǎn),即整體應(yīng)用日志級(jí)別
logging:
	level:
    	root: debug

我們?cè)O(shè)置成debug級(jí)別之后,再運(yùn)行就可以看到:

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

步驟③:設(shè)置日志組,控制指定包對(duì)應(yīng)的日志輸出級(jí)別,也可以直接控制指定包對(duì)應(yīng)的日志輸出級(jí)別

logging:
	# 設(shè)置日志組
    group:
    	# 自定義組名,設(shè)置當(dāng)前組中所包含的包
        ebank: com.nefu.controller,com.nefu.service
    level:
    	root: warn
        # 為對(duì)應(yīng)組設(shè)置日志級(jí)別
        ebank: debug
    	# 為對(duì)包設(shè)置日志級(jí)別
        com.nefu.controller: debug

? 說(shuō)白了就是總體設(shè)置一下,每個(gè)包設(shè)置一下,如果感覺(jué)設(shè)置的麻煩,就先把包分個(gè)組,對(duì)組設(shè)置。

總結(jié)

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

寫(xiě)代碼的時(shí)候每個(gè)類(lèi)都要寫(xiě)創(chuàng)建日志記錄對(duì)象,這個(gè)可以?xún)?yōu)化一下,使用前面用過(guò)的lombok技術(shù)給我們提供的工具類(lèi)即可。

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

? 導(dǎo)入lombok后使用注解搞定,日志對(duì)象名為log

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

日志輸出格式控制

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

  • PID:進(jìn)程ID,用于表明當(dāng)前操作所處的進(jìn)程,當(dāng)多服務(wù)同時(shí)記錄日志時(shí),該值可用于協(xié)助程序員調(diào)試程序。
  • 所屬類(lèi)/接口名:當(dāng)前顯示信息為SpringBoot重寫(xiě)后的信息,名稱(chēng)過(guò)長(zhǎng)時(shí),簡(jiǎn)化包名書(shū)寫(xiě)為首字母,甚至直接刪除。

? 對(duì)于單條日志信息來(lái)說(shuō),日期,觸發(fā)位置,記錄信息是最核心的信息。級(jí)別用于做篩選過(guò)濾,PID與線(xiàn)程名用于做精準(zhǔn)分析。了解這些信息后就可以DIY日志格式了。

模擬的官方日志模板的書(shū)寫(xiě)格式:

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

日志文件

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

? 對(duì)于日志文件的使用存在各種各樣的策略,例如每日記錄,分類(lèi)記錄,報(bào)警后記錄等。這里主要研究日志文件如何記錄。

? 記錄日志到文件中格式非常簡(jiǎn)單,設(shè)置日志文件名即可。

logging:
	file:
    	name: server.log

? 雖然使用上述格式可以將日志記錄下來(lái)了,但是面對(duì)線(xiàn)上的復(fù)雜情況,一個(gè)文件記錄肯定是不能夠滿(mǎn)足運(yùn)維要求的,通常會(huì)每天記錄日志文件,同時(shí)為了便于維護(hù),還要限制每個(gè)日志文件的大小。下面給出日志文件的常用配置方式:

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

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

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

相關(guān)文章

最新評(píng)論