Spring Boot(二)配置分析

  回顧一下采用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表達式。

相關文章
相關標籤/搜索