目錄
SpringBoot配置文件
SpringBoot配置文件的作用?
項目中的重要數(shù)據(jù)寫在配置文件當中
降低代碼耦合?
SpringBoot配置文件的格式?
properties配置文件
讀取配置文件中的內(nèi)容(@Value注解使用${}格式讀取)
properties優(yōu)缺點?
yml配置文件?
yml特點:
yml語法?
yml對于單雙引號的問題?
yml配置對象多行寫法?
yml 配置文件單行寫法
獲取對象:
①在yml配置文件中存放一個對象?
②新建一個實體類(與該對象保存一致)并注入到Spring容器?
③從配置文件中獲取該對象?
④通過屬性注入獲取對象?
yml配置集合?
①在yml中存放一個集合
②注入集合
③獲取bean對象?
properties和yml有什么區(qū)別(重要)?
SpringBoot日志?
日志的作用:?
如何使用日志:?
日志的級別 (由低到高):
日志的級別設置:
日志的持久化:?
①配置日志的保存路徑?
②配置日志的文件名字
③更加簡易的添加日志的方式:添加lombok
lombok常用注解:
SpringBoot配置文件
SpringBoot配置文件的作用?
項目中的重要數(shù)據(jù)寫在配置文件當中
如:數(shù)據(jù)庫的連接信息,項目的啟動端口,第三方系統(tǒng)的日志信息等等,如果沒有我們的配置文件,數(shù)據(jù)庫就不能連接。
降低代碼耦合?
在使用servlet的時候,包括使用JDBC編程的時候,數(shù)據(jù)庫的連接信息都是寫在java代碼中的,在SpringBoot框架中則要寫到配置文件中。
寫到配置文件中就可以降低代碼的耦合程度。?
配置文件中的內(nèi)容便于開發(fā)者進行修改,如果寫在java文件中,那么編譯后的.class文件就是只可以讀的,不能進行修改。而且寫到配置文件中也便于開發(fā)者可以在配置文件中看到項目部署的端口號,數(shù)據(jù)庫連接情況等等。
SpringBoot配置文件的格式?
一般是兩種格式;
properties(默認)
yml(yaml)
如果這兩個格式的配置文件都有的時候(不建議出現(xiàn)兩種),優(yōu)先以properties格式的為主,這也是SpringBoot約定大于配置的一個體現(xiàn)。
注意:兩種格式,都得以application.properties和application.yml命名,因為SpringBoot啟動的時候只讀取application命名的配置文件。?
properties配置文件
鍵值對Key=Value的方式?
可以使用系統(tǒng)的配置,也可以自定義?
讀取配置文件中的內(nèi)容(@Value注解使用${}格式讀?。?/h4>
使用@Value注解來讀取配置文件的內(nèi)容,使用${}獲取到配置文件中內(nèi)容的賦值。
package com.example.demo.Controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
@Value("username")
private String name;
@RequestMapping("/sayHi")
public String sayHi(){
return "Hi "+ name;
}
}
如果不加${}相當于@Value中的字符串賦值給了name。?
如果要獲得賦值的配置文件則需要使用${}來獲取。
package com.example.demo.Controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
@Value("${studentname}")
private String name;
@RequestMapping("/sayHi")
public String sayHi(){
return "Hi "+ name;
}
}
properties優(yōu)缺點?
優(yōu)點:
1.是系統(tǒng)默認的配置文件
2.優(yōu)先級比yml高
3.格式簡單
缺點:寫法比較冗余(包名必須全都寫上,很多相同包名下的配置都要寫上包名)
yml配置文件?
yml是yaml的縮寫,在使用配置文件時使用yml和yaml都可以,推薦使用yml。
yml可讀性高,寫法簡單,易于理解,語法和JSON相似?
yml特點:
??1、寫法簡單、可讀性高;
? ?2、支持更多的數(shù)據(jù)類型
? ?3、支持跨語言的使用(最大優(yōu)勢)
yml語法?
yml也是按照key:value的方式存儲的,但是它的寫法比properties更簡潔。
tab和空格不能少,否則容器無法識別?
package com.example.demo.Controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController//==@Controller+@ResponseBody
public class StudentController {
@Value("${server.bbbb}")
private String name;
@RequestMapping("/sayhi")
public String sayHi(){
return "Hi "+name;
}
}
yml對于單雙引號的問題?
前兩種:
加雙引號;
在網(wǎng)頁中\(zhòng)n轉(zhuǎn)義字符不好看出來。
yml配置對象多行寫法?
#對象多行寫法
student :
id : 1
name : 張三
age : 18
yml 配置文件單行寫法
#對象單行寫法
student2 : {id : 2, name : 李四, age : 19}
獲取對象:
①在yml配置文件中存放一個對象?
?
②新建一個實體類(與該對象保存一致)并注入到Spring容器?
package com.example.demo;
import lombok.Data;
import org.springframework.stereotype.Component;
@Data
@Component
public class Student {
private int id;
private String name;
private int age;
}
③從配置文件中獲取該對象?
④通過屬性注入獲取對象?
package com.example.demo.controller;
import com.example.demo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class StudentController {
@Autowired
private Student student;
public Student getStudent(){
return student;
}
}
yml配置集合?
#集合
#myName對應于實體類
#name是集合
myName : { name : [ 張三, 李四, 王五 ] }
①在yml中存放一個集合
??
②注入集合
③獲取bean對象?
package com.example.demo.controller;
import com.example.demo.MyNameController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/hello")
public class ListController {
@Autowired
private MyNameController myNameController;
@RequestMapping("/hi")
@ResponseBody
public String getNames(){
return myNameController.getName()+"";
}
}
properties和yml有什么區(qū)別(重要)?
區(qū)別1:properties僅僅支持Java項目,但是yml支持包括Java在內(nèi)的多種語言(例如python);
區(qū)別2:properties的key寫起來比較冗余,不像yml那樣簡易。(yml支持層級,層級之間采用縮進的方式)
區(qū)別3:yml支持更多的數(shù)據(jù)類型(string,object,list)
SpringBoot日志?
日志的作用:?
1、發(fā)現(xiàn)和定位問題,報錯了不查看日志,難以發(fā)現(xiàn)和定位問題
2、記錄用戶的登錄日志,方便分析用戶的登錄狀態(tài),是惡意還是正常
3、記錄系統(tǒng)的操作情況,定位操作人,操作時間和操作行為等等?
4、記錄程序的執(zhí)行時間,方便后續(xù)的優(yōu)化等等....?
如何使用日志:?
SpringBoot內(nèi)置了日志框架,所以會有默認的日志。?
??
使用日志,首先我們要找到日志的門面SLF4J ,然后根據(jù)SLF4J獲取到日志對象,再進行使用。
package com.example.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class UserController {
//通過slf4j獲取日志對象
private static Logger logger= LoggerFactory.getLogger(UserController.class);
//輸出日志
@RequestMapping("/hi")
public void sayhi(){
logger.info("hi i'm info");
logger.debug("hi i'm debug");
logger.error("hi i'm error");
logger.warn("hi i'm warn");
}
}
日志的級別 (由低到高):
trace
? ? ? 少許的日志,這一個是最低的級別。debug
? ? ? ? 這個級別用于"調(diào)試"的級別info
? ? ? ?這個級別是普通的日志信息。(如果不指定日志的級別,那么默認就是這個)warn
? ? ? ?警告日志:有一些地方存在警告的風險的,就需要使用到這個warn級別的日志error
? ? ? ?錯誤級別的日志,如果發(fā)生了一些錯誤,那么就需要使用這個級別來記錄。fatal
? ? ? ?發(fā)生了比較致命的情況,需要由系統(tǒng)來進行輸出,不可以由用戶手動進行debug輸出。
?
?默認的級別是info,所以一般情況下只會出現(xiàn)info及其以上的日志,較為低級的日志一般不會出現(xiàn)。
日志的級別設置:
日志的默認級別是info,所以info以上的日志一般不會出現(xiàn),但是這個默認的級別是可以通過配置文件進行修改的。(注意:fatal是由系統(tǒng)輸出的,不能我們手動進行debug輸出)
當我們修改默認級別為error的時候,控制臺就基本沒有日志
上述是全局日志的設定,當然也有局部日志的設定,但是局部日志的設定要服從全局?
日志的持久化:?
日志的持久化,說白了就是把日志存在本地的磁盤?
①配置日志的保存路徑?
這里的路徑中要用“/” ,因為“/”會被認為是特殊符號
?目標目錄下就會有個日志文件:
②配置日志的文件名字
?
③更加簡易的添加日志的方式:添加lombok
1、安裝一個EditStarters插件:
2、添加@Slf4j注解
那么為什么@Slf4j就可以生成一個log對象呢?這個主要是因為在編譯時期@Slf4j會為當前類當中設置一個靜態(tài)從常量屬性,這一個屬性就是log。
我們可以看看UserController的字節(jié)碼文件:
lombok常用注解:
?志注解 :
注解 | 作? | ||
@Slf4j | 添加?個名為 log 的?志,使? slf4j |
基本注解 :
注解 | 作用 | |||||
@Getter | ?動添加 getter ?法 | |||||
@Setter | ?動添加 setter ?法 | |||||
@ToString | ?動添加 toString ?法 | |||||
@EqualsAndHashCode | ?動添加 equals 和 hashCode ?法 | |||||
@NoArgsConstructor | ?動添加?參構(gòu)造?法 | |||||
@AllArgsConstructor | ?動添加全屬性構(gòu)造?法,順序按照屬性的定義順序 | |||||
@NonNull | 屬性不能為 null | |||||
@RequiredArgsConstructor | ?動添加必需屬性的構(gòu)造?法,final + @NonNull 的 屬性為必需 |
組合注解:文章來源:http://www.zghlxwxcb.cn/news/detail-452790.html
注解 | 作用 | |||||
@Data | @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor |
注解的原理,就是在編譯時期添加對應的方法?文章來源地址http://www.zghlxwxcb.cn/news/detail-452790.html
到了這里,關于SpringBoot配置文件和日志的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!