回顧一下采用SSM開發項目時,項目中會存在多個配置文件,好比web.xml,配置Spring相關的applicationContext-springmvc.xml, applicationContext-dao.xml等,對於應用自身的配置,甚至還須要編寫專門的代碼去讀取這些配置文件中的參數。在Spring Boot中,簡化了Spring相關配置的管理和讀取,只須要一個application.properties文件,SpringBoot提供了多種讀取配置文件的方式。java
配置Spring Boot
配置服務器端口號
Spring Boot默認啓動端口是8080端口,能夠經過在application.properties中從新配置來修改默認端口號,須要添加配置屬性server.port:web
server.port=8088
也能夠再命令行中指定啓動端口號,只須要一條命令:spring
java -jar xxx.jar --server.port=8088
便可將xxx.jar應用的啓動端口號修改成爲8088,嘗試經過http://localhost:8088/demo 訪問應用.springboot
日誌配置
在SpringBoot中,默認狀況下不須要對日誌作額外的配置已經能夠使用自帶的日誌,Spring Boot默認使用LogBack來打印日誌。服務器
默認日誌格式如上,日誌每行內容格式爲:mvc
1. 日期和時間: 格式yyyy-mm-dd hh:mm:ss.SSSapp
2. 日誌級別:按級別從高到低依次爲: fatal,error,warn,info,debug,trace框架
3. 進程id:Spring Boot應用的進程Idspring-boot
4. --- :分隔符 分隔具體的日誌消息性能
5. [xxx]:線程名稱
6. 類名:
7. 消息體:
默認狀況下,只要Info級別以上的日誌信息纔會打印到控制檯,也能夠本身設置日誌輸出級別,須要在application.properties配置文件中配置logging.level.root屬性,如:
logging.level.root=trace
一樣也能夠經過命令中執行,開發中可經過參數—debug將日誌界別調整爲debug級別:
java -jar xxx.jar –debug
Spring Boot默認並無將日誌輸出到文件(指定輸出文件名),能夠在application.properties中指定日誌輸出:
logging.file= log //日誌輸出到應用運行的根目錄下log文件中 logging.file=d:/logs/log //指定日主輸入到d盤logs文件夾下log文件中
或者經過logging.path屬性設置(指定輸出目錄)
logging.path=d:/logs //日誌輸出到d盤logs文件夾下spring.log文件中(默認文件名spring.log)
logging.file和logging.path屬性不能同時使用,若是同時使用,只有logging.file生效
不管採用上面那種方式記錄日誌文件,當日志文件到達10MB的時候,會自動從新生成一個新日誌文件
SpringBoot也支持對控制檯日誌輸出和文件輸出進行格式空直,application.properties配置代碼以下:
logging.pattern.console= %level %date{HH:mm:ss} %logger{20}.%M %L :%m%n logging.pattern.file = %level %date{ISO8601} [%thread] %logger{20}.%M %L :%m%n
1. %level :表示輸出日誌級別
2. %date :表示日誌產生時間,%date{ISO8601}表示標準日期格式
3. %logger:用於輸出Logger名稱,包括報名+類名,{n}:限制長度
4. %thread:當前線程
5. %M: 產生日誌所在的方法名
6. %L:日誌調用所在額代碼行,(獲取代碼行對性能有消耗,生產環境不建議使用此參數)
7. %m:日誌消息具體類容
8. %n:日誌換行
Spring Boot支持多種日誌框架,若是須要自定義日誌配置,能夠經過在resources目錄下新建logback-spring.xml來對Logback進行更詳細的配置,其餘日誌框架也同樣。
讀取應用配置
能夠在應用中讀取application.properties文件中的配置,Spring Boot提供了三種方式,經過通用的Enviroment類、經過key-value方式獲取到application.properties中的值、也能夠經過@Value註解自動注入屬性值。
經過Environment類讀取
Environment是一個通用的讀取應用程序運行時的環境變量的類,可以讀取application.properties、命令行輸入參數、系統屬性、操做系統環境變量等。能夠經過Spring容器自動注入。
@Autowired private Environment env; @RequestMapping("/demo") public String demo() { //讀取application.properties配置中端口號 System.out.print(env.getProperty("server.port",Integer.class)); return "Spring Boot Demo"; }
經過@Value註解讀取
能夠經過@Value註解,直接將配置信息注入到Spring管理的Bean中:
@Value("${server.port}") private String port;
@RequestMapping("/demo2") public String demo2() { System.out.print("端口號:"+port); return "Spring Boot Demo 修改"; }
@Value註解並不能在任何Spring管理的Bean中使用,由於@Value自己是經過AutowiredAnnotationBeanPostProcrssor實現的,是BeanPostPrcessor接口的實現類,所以任何BeanPostProcessor和BeanFactoryPostProcessor的子類中都不能使用@Value來注入屬性,由於這個時候@Value尚未被處理。
@Value註解還支持SpEL表達式,若是屬性不存在,能夠賦值默認值:
@Value("${server.title:默認值}") private String title;
經過@ConfigurationProperties註解
使用@ConfigurationProperties註解可將一些列配置屬性映射到一個自定義類中,方便開發中按分類讀取,好比在application.properties中添加一下配置
com.sl.name=test com.sl.password=1111
實現步驟
1.自定義配置類
@Component //@PropertySource(value="classpath:/application.properties") //指定綁定哪一個資源文件,這裏的application.properties文件是springboot默認的資源文件,是能夠不用指定的,若是是自定義的資源文件,須要綁定 @ConfigurationProperties(prefix = "com.sl") //須要映射的屬性淺醉 public class PropertiesConfig { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
2.pomxml添加依賴項
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
@Autowired private PropertiesConfig config;
@RequestMapping("/demo3") public String demo3() { System.out.print(config.getName()); System.out.print(config.getPassword()); return "Spring Boot Demo"; }
@ConfigurationProperties註解的類,會自動將「-」、「_」去掉,轉化成java命名規範,好比講context-path配置映射到屬性contextPath上。
@ConfigurationProperties和@Value功能類似,ConfigurationProperties能夠將一組屬性統一管理,@Value的優是支持SpEL表達式。