springboot 專案實戰-02章
1.本章介紹(略)
2.如何快速生成Springboot專案(略)
3.原生代碼關聯遠端倉庫的git操作
git init->git add . ->git commit -m "備註資訊" ->git remote add origin 你的遠端倉庫地址 ->git push -u origin master
4.springboot 專案新的認知
springboot專案是父子專案,體現在maven上
springboot專案是嵌入式容器,自動使用tomcat啟動專案的
5.啟動日誌優化
5.1 logback 日誌樣式
springboot 2.2 版本以上的,直接新增一個檔案logback-spring.xml 到resource資料夾下,只要是這個名兒,springboot就可以自動識別它。
檔案的內容:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 修改一下路徑--> <property name="PATH" value="./log"></property> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <Pattern>%d{ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %thread %green(%-18X{LOG_ID}) %msg%n</View CodePattern> </encoder> </appender> <appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${PATH}/trace.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern> </layout> </appender> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${PATH}/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern> </layout> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <root level="ERROR"> <appender-ref ref="ERROR_FILE" /> </root> <root level="TRACE"> <appender-ref ref="TRACE_FILE" /> </root> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
解讀檔案:
<Pattern>
輸出格式上,%d 表示時間,%highlight 表示高亮,%-5level 表示從左往右,顯示5個字元,%blue
%d{ss.SSS}:日期格式,表示秒:毫秒 ,同樣的,HH:mm:ss.SSS 則表示小時:分鐘:秒:毫秒 ,不想要哪個時間單位,就去掉哪個就好。
%highlight(%-5level) :列印日誌級別
%blue(%-30logger{30}:%-4line)
%thread:執行緒
%green(%-18X{LOG_ID})
%msg:日誌資訊
%n:換行</Pattern>
5.2 增加啟動成功的日誌
LOG.info("start success!");
LOG.info("地址: \thttp://127.0.0.1:{}",env.getProperty("server.port"));
用env.getProperty("屬性名")獲取application.properties裡的配置屬性即可。
5.3 啟動圖案修改
在resource下面新增一個名叫banner.txt的檔案,在這裡http://patorjk.com/software/taag/#p=display&h=2&v=1&f=Flower%20Power&t=XXXQ,在右邊的框框裡輸入文字或者英文,選一個喜歡的圖案樣式,copy到banner.txt裡面。再次啟動Springboot服務,就可以看到新的啟動圖案了
6.開發helloworld的http介面
6.1 開發helloworld介面(略)
6.2 專案分層
介面:一般要放在controller層
註解:
@requestMapping("/test") ,路由
@restController 返回字串型別。
@Controller 返回頁面(前後端不分離的話,用這個註解,前後端分離的話,就基本是用不著了),本次實戰用不著這個註解。
啟動類裡有個類註解@ComponentScan("com.xxx.wiki") 這個註解的作用是增加springboot 專案的掃描返回,比如我們知道,啟動類在哪裡,預設就掃描啟動類的子目錄下的內容,但是啟動類如果不在預設位置,或者在預設位置,但是 還是希望掃描一些額外的不在啟動類裡面的子專案,我們就可以用註解@ComponentScan("com.xxx.wiki","com.xxx.wiki")來擴大掃描範圍
7.idea自帶 http client 測試介面
7.1 好處:減掉視窗切換導致的效率低下;解決瀏覽器不能訪問post請求的問題
7.2 怎麼用?
(1)在專案檔案下新建一個.http 字尾的檔案,檔名隨意取,檔案字尾一定要是.http 的,比如test.http
(2)在test.http資料夾裡面 輸入 gtr,生成一個不帶入參的GET型別的http請求。
GET http://localhost:80/api/item
Accept: application/json
###
這個快捷鍵在idea的這裡:idea-屬性-live_templates 找到httprequest 開啟 就可以看到idea已經準備好的 預設的請求模版,注意,如果test.http 檔案中 要寫多個http請求,那麼要保留“###”,將多個請求隔離開來。當然 我們也可以自定義自己的模版,但是我目前不會
生成的http請求是個模版,改成適合自己專案的請求即可,然後發起請求(test.http檔案,對每個請求的旁邊有一個綠色三角啟動鍵,啟動就可以發起請求),發起的所有請求打的日誌都在專案根目錄下可以找到,比如找.idea/httpRequests裡面,多個log檔案,每一個檔案代表了一次請求的日誌。
8.Springboot 配置
8.1 預設配置檔案
1.可自動識別resource/application.properties的檔案(這個是預設的),可以自動識別resource/config /application.properties(這個是自建的),這兩個檔案都有的時候,內層檔案生效。
也可以自動識別resource/application.yml,也可以自動識別resource/config /application.yml。
2.可自動識別bootstrap.properties,一般用於動態配置,線上可以實施修改實時生效,一般可配合nacos使用。
3.yaml和.properties 的轉換:https://toyaml.com/index.html。
4.對1和2的總結:
springboot會自動識別下面這組檔案,
application.properties/yml 檔案 和 config/application.properties/yml
springcloud會自動識別下面這組檔案,
bootstrap.properties/yml檔案和config/bootstrap.properties/yml
8.2 自定義配置項
我們在application.properties裡重新定義server.port=8088 ,覆蓋掉了預設值8080
我們還可以在application.properties再配置一個:test.config=test
然後,在controller裡這樣使用:
@Value("${test.config}")// @value 註解,${}包裹配置name,
private String testConfig;//定義一下這個變數,value給這個變數用,具體看@value註解怎麼用
@GetMapping("/test/config")//寫一個介面,把讀出來的配置value返回
public String test(){
return "test"+":"+testConfig;
}
寫一個test.http 請求(gtr),測試一下
GET http://localhost:8088/test/config
Accept: application/json
###
測一下,結果為:
GET http://localhost:8088/test/config
HTTP/1.1 200
Content-Type: application/json
Content-Length: 9
Date: Wed, 19 Jan 2022 05:09:43 GMT
Keep-Alive: timeout=60
Connection: keep-alive
test:test
Response code: 200; Time: 105ms; Content length: 9 bytes
OK!測試通過
另外,預設配置這樣寫@Value("${test.config:defualt value}"),如果在配置檔案中讀不到配置value,就在這裡讀預設值。