目錄
1. Spring Boot 項(xiàng)目創(chuàng)建
2. 寫一個(gè) Hello World 并運(yùn)行
3. 配置文件的作用及格式
4. properties 配置文件的基本語法?
5. 讀取配置文件
6. yml 配置文件說明
7. properties 和 yml 的區(qū)別
8. SpringBoot 日志文件
8.1 日志的作用
8.2 自定義日志打印
8.3 日志的級別
8.4 日志持久化
8.5 更簡單的實(shí)現(xiàn)日志打印lombok
Spring的出現(xiàn)是為了簡化 Java 程序開發(fā),而 SpringBoot 的出現(xiàn)是為了簡化 Spring 程序開發(fā).
SpringBoot 就是 Spring腳手架
- 快速集成框架,SpringBoot 提供了啟動(dòng)添加依賴的功能
- 內(nèi)置運(yùn)行容器,無需配置 Tomcat 等 Web 容器, 直接運(yùn)行和部署程序
- 快速部署項(xiàng)目,無需外部容器即可啟動(dòng)并運(yùn)行項(xiàng)目
- 可以完全拋棄繁瑣的 XML, 使用注解和配置的方式進(jìn)行開發(fā)
- 支持更多的監(jiān)控指標(biāo), 可以更好的了解項(xiàng)目的運(yùn)行情況
1. Spring Boot 項(xiàng)目創(chuàng)建
我這里是專業(yè)版,不用下載插件直接可以創(chuàng)建
第一次打開 SpringBoot 項(xiàng)目需要加載很久, 因?yàn)楫?dāng)前 SpringBoot 框架并沒有在自己的本地倉庫
(2) 選取 SpringBoot 的版本, 和需要使用的工具包??
?(3) Finish后,可以看到創(chuàng)建成功了,直接運(yùn)行一下,如果出現(xiàn)這個(gè) JVM運(yùn)行時(shí)間就說明創(chuàng)建成功了
?(4) 刪除掉無用的目錄?
2. 寫一個(gè) Hello World 并運(yùn)行
(1) 創(chuàng)建一個(gè)類,注意和 Application 平級,寫一個(gè)方法,返回 Hello World
- ?????先加一個(gè) @Controller,? ? 也就是運(yùn)行項(xiàng)目后,會(huì)先找到這個(gè)類
- 然后再加 @RequestMapping,? ?這個(gè)的作用就是前面找到 @Controller后,有了這個(gè)@RequestMapping就會(huì)鎖定我寫的方法 sayHi()? ?,注意里面字母都小寫
- 加@ResponseBody的作用是,我想返回給頁面一個(gè)非靜態(tài)的數(shù)據(jù)(也就是給響應(yīng)Body中放一個(gè)字符串)
?然后直接運(yùn)行,頁面輸入 127.0.0.1:8080/sayhi 可以看到訪問成功了
3. 配置文件的作用及格式
(1) 在整個(gè)項(xiàng)目中所有重要的數(shù)據(jù)都是在配置文件中配置的, 比如:
- 項(xiàng)目的啟動(dòng)端口
- 數(shù)據(jù)庫的連接信息 (包含用戶名和密碼的設(shè)置)
- 第三方系統(tǒng)的調(diào)用秘鑰等信息
- 用于發(fā)現(xiàn)和定位問題的普通日志和異常日志等
在 Spring Boot 項(xiàng)目中如果沒有配置信息,就不能連接和操作數(shù)據(jù)庫, 甚至是不能保存可以用于排查問題的關(guān)鍵日志, 所以配置文件的作用是非常重要的
(2) 配置文件的分類:
- 系統(tǒng)的配置文件, 比如: 連接字符串, 日志的相關(guān)設(shè)置
- 用戶自定義的
(3) 配置文件的格式
- ?. properties
- ?. yml
一個(gè)項(xiàng)目中可以存在兩種配置文件 (properties 和 yml) , 但是不建議這樣搞
當(dāng)一個(gè)項(xiàng)目的某個(gè)配置, 出現(xiàn)在兩種格式的配置文件中時(shí), 那么配置項(xiàng)會(huì)以 properties 為主
?如果此時(shí)修改了配置文件的名字, 重新運(yùn)行程序, 就訪問不到了
4. properties 配置文件的基本語法?
?properties 是以鍵值的形式配置的, key=value? 中間是以 "=" 連接的?
關(guān)于 properties 中文亂碼的問題處理
因?yàn)?properties 是早期的配置文件, 不支持中文, 所以比如當(dāng)重啟 idea 后, 中文就會(huì)亂碼
可以設(shè)置一下
(1) 配置當(dāng)前項(xiàng)目中文亂碼的問題
?(2)?配置新項(xiàng)目中文亂碼的問題
5. 讀取配置文件
如果在項(xiàng)目中, 想要主動(dòng)讀取配置文件中的內(nèi)容, 可以使用 @Value 注解來實(shí)現(xiàn)
@Value 注解使用 "${}" 的格式讀取
?
?可以看到如果要讀取多個(gè)配置文件中的信息, properties 配置文件中會(huì)有很多的容易信息, 比如
?
?要想解決這個(gè)問題, 就可以使用 yml 配置文件的格式化了
6. yml 配置文件說明
yml 意思是"另一種標(biāo)記語言", yml 是一個(gè)可讀性高, 易于理解,用來表達(dá)數(shù)據(jù)序列化的格式. 特別適合用來表達(dá)或編輯數(shù)據(jù)結(jié)構(gòu), 各種配置文件等. yml 最大優(yōu)勢是可以跨語言, 比如 golang java python 都可以使用 yml 作為配置文件
(1) yml 基本語法
yml 是樹形結(jié)構(gòu)的配置文件, 基礎(chǔ)語法是 "key: value",? 注意 中間使用冒號和空格連接的,空格不要省略
(2) yml 配置不同的數(shù)據(jù)類型
# 字符串
string.value: hello
# 布爾值
boolean.value: true
# 整數(shù)
int.value: 10
# 浮點(diǎn)數(shù)
float.value: 3.14159
# Null, ~ 表示 null
null.value: ~
(3) yml 單雙引號的問題
(4) 配置對象
在 yml 中配置對象, 這個(gè)時(shí)候需要使用注解 @ConfigurationProperties 來讀取
?
(5)配置集合
配置文件也可以配置 list 集合
7. properties 和 yml 的區(qū)別
- properties 是以 key=value 的形式配置的鍵值類型的配置文件, 而 yml 使用的是類似于 json 格式的配置方式, key: value 中間用冒號和空格連接
- properties 是早期并且也是默認(rèn)的配置文件格式, 這種方式存在一定的冗余數(shù)據(jù), yml 可以很好的解決這種冗余問題
- yml 通用性更好,支持更多語言, 并且支持更多的數(shù)據(jù)類型
8. SpringBoot 日志文件
8.1 日志的作用
日志是程序的重要組成部分,當(dāng)程序報(bào)錯(cuò)是就可以通過,日志來發(fā)現(xiàn)和定位問題,并且日志的作用還有
- 記錄用戶登錄日志,方便分析用戶是正常登錄還是惡意破解用戶
- 記錄系統(tǒng)的操作日志, 方便數(shù)據(jù)恢復(fù)和定位操作人
- 記錄程序的執(zhí)行時(shí)間, 方便為以后優(yōu)化程序提供數(shù)據(jù)支持
Spring Boot 項(xiàng)目在啟動(dòng)的時(shí)候就有默認(rèn)的日志輸出
如果這個(gè)默認(rèn)的日志輸出,就可以發(fā)現(xiàn)問題
- Spring Boot 內(nèi)置了日志框架
- 默認(rèn)情況下, 輸出的日志并非是開發(fā)者定義和打印的, 那么開發(fā)者如何在程序中自定義打印日志
- 日志默認(rèn)是打印在控制臺(tái)上的, 但這樣是不能被保存的, 那么怎樣把日志持久化保存下來
8.2 自定義日志打印
自定義打印日志的實(shí)現(xiàn)步驟:
- 在程序中得到日志對象
- 使用日志對象的相關(guān)語法輸出要打印的內(nèi)容
?可以看到這里日志打印只出現(xiàn)了三個(gè), 這是因?yàn)槟J(rèn)的日志級別是 info 的, 這里只會(huì)輸出級別大于等于 info 的
package com.example.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @Description:
* @Date 2022/12/27 14:04
*/
@Controller
@ResponseBody
public class UserController2 {
// 1.先得到日志對象 (設(shè)置當(dāng)前類的類型)
private final static Logger log = LoggerFactory.getLogger(UserController2.class);
@RequestMapping("/sayhii")
public void sayHii() {
// 2.使用日志對象提供的方法進(jìn)行打印
log.trace("trace 最小");
log.debug("debug 調(diào)試");
log.info("info 普通");
log.warn("warn 警告");
log.error("error 錯(cuò)誤");
}
}
8.3 日志的級別
日志級別可以幫助篩選出重要的信息
- trace: 微量, 少許, 級別最低
- debug: 調(diào)試日志
- info: 普通信息日志
- warn: 警告日志
- error: 錯(cuò)誤日志
- fatal: 致命的日志, 系統(tǒng)輸出的, 不能自定義打印
當(dāng)存在局部日志級別和全局日志級別設(shè)置時(shí), 那么當(dāng)訪問局部日志時(shí), 使用的是局部日志級別,?
局部日志級別優(yōu)先級 > 全局的日志級別?
# 設(shè)置全局的日志級別 (properties)
logging.level.root=info
# 設(shè)置局部文件夾的日志級別
logging.level.com.example.demo.controller=trace
# 全局日志級別的配置 yml
logging:
level:
root: error
8.4 日志持久化
日志持久化: 將日志永久的保存到磁盤的某個(gè)位置, 有兩種方式
- 在配置文件中設(shè)置日志的保存路徑, 當(dāng)設(shè)置了保存路徑之后, 那么日志就會(huì)自動(dòng)的進(jìn)行持久化
- 在配置文件中設(shè)置日志保存的名稱, 日志會(huì)自動(dòng)進(jìn)行持久化
(1) 設(shè)置日志的保存路徑
# 設(shè)置日志的保存目錄 (properties)
logging.file.path=D:/IDEA/
# 如果想使用 \ 就要注意轉(zhuǎn)義的問題,這里用\\
logging.file.path=D:\\IDEA\\
# 設(shè)置日志保存的目錄 (yml)
logging:
file:
path: D:/IDEA/
可以看到日志保存到了這個(gè)目錄下的位置?
?(2) 設(shè)置日志的保存名稱
# 設(shè)置日志的保存名稱 (properties)
logging.file.name=D:/IDEA/spring-boot.log
8.5 更簡單的實(shí)現(xiàn)日志打印lombok
添加 lombok 到當(dāng)前項(xiàng)目
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<optional>true</optional>
</dependency>
(1) 使用 @Slf4j 得到日志對象 log文章來源:http://www.zghlxwxcb.cn/news/detail-816277.html
(2) 使用 log 對象自定義打印日志文章來源地址http://www.zghlxwxcb.cn/news/detail-816277.html
package com.example.demo.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
//@RestController = @Controller + @ResponseBody
@RestController
@Slf4j // 代替了之前需要通過 LoggerFactory.getLogger 操作
public class UserService {
@RequestMapping("/sayhi2")
public void sayHi2() {
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
}
}
到了這里,關(guān)于SpringBoot(項(xiàng)目創(chuàng)建使用+配置文件+日志文件)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!