SpringBoot項(xiàng)目創(chuàng)建使用+配置文件+日志文件詳解
Spring的出現(xiàn)是為了簡(jiǎn)化 Java 程序開發(fā),而 SpringBoot 的出現(xiàn)是為了簡(jiǎn)化 Spring 程序開發(fā).
SpringBoot 就是 Spring腳手架
- 快速集成框架,SpringBoot 提供了啟動(dòng)添加依賴的功能
- 內(nèi)置運(yùn)行容器,無(wú)需配置 Tomcat 等 Web 容器, 直接運(yùn)行和部署程序
- 快速部署項(xiàng)目,無(wú)需外部容器即可啟動(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 框架并沒有在自己的本地倉(cāng)庫(kù)
(2) 選取 SpringBoot 的版本, 和需要使用的工具包
(3) Finish后,可以看到創(chuàng)建成功了,直接運(yùn)行一下,如果出現(xiàn)這個(gè) JVM運(yùn)行時(shí)間就說(shuō)明創(chuàng)建成功了
(4) 刪除掉無(wú)用的目錄
2. 寫一個(gè) Hello World 并運(yùn)行
(1) 創(chuàng)建一個(gè)類,注意和 Application 平級(jí),寫一個(gè)方法,返回 Hello World
- 先加一個(gè) @Controller, 也就是運(yùn)行項(xiàng)目后,會(huì)先找到這個(gè)類
- 然后再加 @RequestMapping, 這個(gè)的作用就是前面找到 @Controller后,有了這個(gè)@RequestMapping就會(huì)鎖定我寫的方法 sayHi() ,注意里面字母都小寫
- 加@ResponseBody的作用是,我想返回給頁(yè)面一個(gè)非靜態(tài)的數(shù)據(jù)(也就是給響應(yīng)Body中放一個(gè)字符串)
然后直接運(yùn)行,頁(yè)面輸入 127.0.0.1:8080/sayhi 可以看到訪問成功了
3. 配置文件的作用及格式
(1) 在整個(gè)項(xiàng)目中所有重要的數(shù)據(jù)都是在配置文件中配置的, 比如:
- 項(xiàng)目的啟動(dòng)端口
- 數(shù)據(jù)庫(kù)的連接信息 (包含用戶名和密碼的設(shè)置)
- 第三方系統(tǒng)的調(diào)用秘鑰等信息
- 用于發(fā)現(xiàn)和定位問題的普通日志和異常日志等
在 Spring Boot 項(xiàng)目中如果沒有配置信息,就不能連接和操作數(shù)據(jù)庫(kù), 甚至是不能保存可以用于排查問題的關(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 配置文件的基本語(yǔ)法
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 注解來(lái)實(shí)現(xiàn)
@Value 注解使用 "${}" 的格式讀取
可以看到如果要讀取多個(gè)配置文件中的信息, properties 配置文件中會(huì)有很多的容易信息, 比如
要想解決這個(gè)問題, 就可以使用 yml 配置文件的格式化了
6. yml 配置文件說(shuō)明
yml 意思是"另一種標(biāo)記語(yǔ)言", yml 是一個(gè)可讀性高, 易于理解,用來(lái)表達(dá)數(shù)據(jù)序列化的格式. 特別適合用來(lái)表達(dá)或編輯數(shù)據(jù)結(jié)構(gòu), 各種配置文件等. yml 最大優(yōu)勢(shì)是可以跨語(yǔ)言, 比如 golang java python 都可以使用 yml 作為配置文件
(1) yml 基本語(yǔ)法
yml 是樹形結(jié)構(gòu)的配置文件, 基礎(chǔ)語(yǔ)法是 "key: value", 注意 中間使用冒號(hào)和空格連接的,空格不要省略
(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 單雙引號(hào)的問題
(4) 配置對(duì)象
在 yml 中配置對(duì)象, 這個(gè)時(shí)候需要使用注解 @ConfigurationProperties 來(lái)讀取
(5)配置集合
配置文件也可以配置 list 集合
7. properties 和 yml 的區(qū)別
- properties 是以 key=value 的形式配置的鍵值類型的配置文件, 而 yml 使用的是類似于 json 格式的配置方式, key: value 中間用冒號(hào)和空格連接
- properties 是早期并且也是默認(rèn)的配置文件格式, 這種方式存在一定的冗余數(shù)據(jù), yml 可以很好的解決這種冗余問題
- yml 通用性更好,支持更多語(yǔ)言, 并且支持更多的數(shù)據(jù)類型
8. SpringBoot 日志文件
8.1 日志的作用
日志是程序的重要組成部分,當(dāng)程序報(bào)錯(cuò)是就可以通過(guò),日志來(lái)發(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)上的, 但這樣是不能被保存的, 那么怎樣把日志持久化保存下來(lái)
8.2 自定義日志打印
自定義打印日志的實(shí)現(xiàn)步驟:
- 在程序中得到日志對(duì)象
- 使用日志對(duì)象的相關(guān)語(yǔ)法輸出要打印的內(nèi)容
可以看到這里日志打印只出現(xiàn)了三個(gè), 這是因?yàn)槟J(rèn)的日志級(jí)別是 info 的, 這里只會(huì)輸出級(jí)別大于等于 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.先得到日志對(duì)象 (設(shè)置當(dāng)前類的類型) private final static Logger log = LoggerFactory.getLogger(UserController2.class); @RequestMapping("/sayhii") public void sayHii() { // 2.使用日志對(duì)象提供的方法進(jìn)行打印 log.trace("trace 最小"); log.debug("debug 調(diào)試"); log.info("info 普通"); log.warn("warn 警告"); log.error("error 錯(cuò)誤"); } }
8.3 日志的級(jí)別
日志級(jí)別可以幫助篩選出重要的信息
- trace: 微量, 少許, 級(jí)別最低
- debug: 調(diào)試日志
- info: 普通信息日志
- warn: 警告日志
- error: 錯(cuò)誤日志
- fatal: 致命的日志, 系統(tǒng)輸出的, 不能自定義打印
當(dāng)存在局部日志級(jí)別和全局日志級(jí)別設(shè)置時(shí), 那么當(dāng)訪問局部日志時(shí), 使用的是局部日志級(jí)別,
局部日志級(jí)別優(yōu)先級(jí) > 全局的日志級(jí)別
# 設(shè)置全局的日志級(jí)別 (properties) logging.level.root=info # 設(shè)置局部文件夾的日志級(jí)別 logging.level.com.example.demo.controller=trace
# 全局日志級(jí)別的配置 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 更簡(jiǎn)單的實(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 得到日志對(duì)象 log
(2) 使用 log 對(duì)象自定義打印日志
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 // 代替了之前需要通過(guò) 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)建使用+配置文件+日志文件的文章就介紹到這了,更多相關(guān)SpringBoot項(xiàng)目創(chuàng)建使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java幸運(yùn)28系統(tǒng)搭建數(shù)組的使用實(shí)例詳解
在本篇文章里小編給大家整理了關(guān)于Java幸運(yùn)28系統(tǒng)搭建數(shù)組的使用實(shí)例內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。2019-09-09SpringCloud整合Activiti過(guò)程中的踩坑記錄
由于項(xiàng)目需要,最近開始在項(xiàng)目Spring boot中集成工作流引擎Activiti,由于第一次集成,一路上步步都是坑,所以這篇文章主要給大家介紹了關(guān)于SpringCloud整合Activiti過(guò)程中所遇到的踩坑記錄,需要的朋友可以參考下2021-09-09Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06Java實(shí)現(xiàn)微信公眾號(hào)發(fā)送模版消息
大家好,本篇文章主要講的是Java實(shí)現(xiàn)微信公眾號(hào)發(fā)送模版消息,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01mybatis關(guān)系映射之一對(duì)多和多對(duì)一
今天小編就為大家分享一篇關(guān)于mybatis關(guān)系映射之一對(duì)多和多對(duì)一,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01在CentOS7(有圖形化界面)上安裝maven和idea的詳細(xì)教程
這篇文章主要介紹了在CentOS7(有圖形化界面)上安裝maven和idea的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03java實(shí)現(xiàn)PDF轉(zhuǎn)圖片的方法
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)PDF轉(zhuǎn)圖片的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Java并發(fā)之原子性 有序性 可見性及Happen Before原則
一提到happens-before原則,就讓人有點(diǎn)“丈二和尚摸不著頭腦”。這個(gè)涵蓋了整個(gè)JMM中可見性原則的規(guī)則,究竟如何理解,把我個(gè)人一些理解記錄下來(lái)。下面可以和小編一起學(xué)習(xí)Java 并發(fā)四個(gè)原則2021-09-09ElasticSearch創(chuàng)建后索引修改數(shù)據(jù)類型方法步驟
Elasticsearch存儲(chǔ)數(shù)據(jù)之前需要先創(chuàng)建索引,類似于結(jié)構(gòu)型數(shù)據(jù)庫(kù)建庫(kù)建表,創(chuàng)建索引時(shí)定義了每個(gè)字段的索引方式和數(shù)據(jù)類型,這篇文章主要給大家介紹了關(guān)于ElasticSearch創(chuàng)建后索引修改數(shù)據(jù)類型的方法步驟,需要的朋友可以參考下2023-09-09Springboot使用test無(wú)法啟動(dòng)問題的解決
這篇文章主要介紹了Springboot使用test無(wú)法啟動(dòng)問題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10