一、Profiles
Spring配置文件提供了一種方法來隔離應用程序配置的各個部分,並使其僅在某些環境中可用。任何@Component、@Configuration或@ConfigurationProperties都可以標記為@Profile來限制加載時間,如下面的示例所示:
@Configuration(proxyBeanMethods = false) @Profile("production") public class ProductionConfiguration { // ... }
注:如果@ConfigurationProperties bean是通過@EnableConfigurationProperties而不是通過自動掃描注冊的,則需要在具有@EnableConfigurationProperties注釋的@Configuration類上指定@Profile注釋。在掃描@ConfigurationProperties的情況下,可以在@ConfigurationProperties類本身上指定@Profile。
你可以使用spring.profiles.active環境屬性,以指定哪些配置文件是活動的。您可以使用本章前面描述的任何方式指定屬性。例如,您可以在應用程序中包含它。屬性如下例所示:
spring.profiles.active=dev,hsqldb
我們也可以使用命令行指定:
--spring.profiles.active=dev,hsqldb
1.添加活躍的配置文件
spring.profiles.active屬性遵循其它屬性的一樣順序規則:最高的屬性來源獲勝。 簡言之,依據學習(二)中提到的,不同的外面文件加載順序是不一樣的,相同的配置屬性時,優先級高的值替換優先級低的。換句話說,我們可以通過命令行的配置來替換項目中加載的application.properties配置。
有時,將profil-specific文件的屬性添加到活動profiles文件而不是替換它們是很有用的。spring.profiles.include屬性可用於無條件地添加活動配置文件。SpringApplication入口點還有一個用於設置額外概要文件的Java API(也就是說,優先於spring.profiles.active屬性))。參見SpringApplication中的setAdditionalProfiles()方法。
例如,當應用以--spring.profiles.active=prod命令行啟動時,proddb和prodmq文件都是被激活的。
--- my.property: fromyamlfile --- spring.profiles: prod spring.profiles.include: - proddb - prodmq
2.以編程方式設置配置文件
兩種:
第一種:在應用啟動前,調用SpringApplication.setAdditionalProfiles(…)。
例(指定活躍文件):
a.在代碼中顯示增加SpringApplication .setAdditionalProfiles("dev");
b.運行Application.java文件啟動,則增加參數System.setProperty("spring.profiles.active", "dev");、
c.命令行直接運行jar文件,則使用java -jar -Dspring.profiles.active=dev demo-0.0.1-SNAPSHOT.jar
第二種:使用spring的ConfigurableEnvironment接口。
詳細可參考文檔:https://blog.csdn.net/mayongzhan_csdn/article/details/86647983
3.Profile配置文件
在application.properties(application.yml)和引用的文件中的profile都是通過@ConfigurationProperties來找到文件並加載的。
二、日志
Springboot提供了Java Util Logging 、Log4j2和Logback。
如果使用“Starters”,默認使用Logback。
注:
1.Java有許多可用的日志記錄框架。如果上面的列表看起來令人困惑,請不要擔心。通常,您不需要更改日志記錄依賴項,並且Spring Boot默認值可以正常工作。
2.將應用程序部署到servlet容器或應用程序服務器時,通過Java Util Logging API執行的日志記錄不會路由到應用程序的日志中。這樣可以防止由容器或已部署到容器中的其他應用程序執行的日志記錄出現在應用程序的日志中。
1.日志格式
2019-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms 2019-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2019-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
Log Level: ERROR
, WARN
, INFO
, DEBUG
, or TRACE
.
注:Logback does not have a FATAL
level. It is mapped to ERROR
2.控制台輸出
默認輸出到控制台的級別:ERROR,WARN,INFO.
如果要打印debug級別,java -jar myapp.jar --debug
注:我們也可以在application.properties中指定debug=true。
2.1有色條標志輸出
如果終端支持ANSI,則可以使用彩色輸出來提高可讀性。可以設置spring.output.ansi.enabled為支持的值來覆蓋自動檢測。AnsiOutput.Enabled的值可為:ALWAYS DETECT NEVER
通過使用%clr
轉換字來配置顏色編碼。根據對級別輸出着色:
日志級別到顏色的映射:FATAL ERROR 紅色 WARN 黃色 INFO DEBUG TRACE 綠色
也可以通過將需要轉換的選項指定使用顏色和樣式。例如文本變黃,使用以下:
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
支持以下顏色和樣式:blue、cyan、faint、green、magenta、red、yellow。
3.文件輸出
默認情況下,Spring Boot僅記錄到控制台,不寫日志文件。如果除了控制台輸出外還想寫日志文件,則需要設置一個logging.file.name
或logging.file.path
屬性(例如,在application.properties
)。
logging.file.name |
logging.file.path |
Example | Description |
---|---|---|---|
(none) |
(none) |
Console only logging. |
|
Specific file |
(none) |
|
Writes to the specified log file. Names can be an exact location or relative to the current directory. |
(none) |
Specific directory |
|
Writes |
當文件達到10MB時,日志將從頭開始重新寫入。
可以使用該logging.file.max-size
屬性更改文件大小限制
日志檔案的總大小可以使用設置上限logging.file.total-size-cap
。當日志歸檔的總大小超過該閾值時,將刪除備份。要在應用程序啟動時強制清除日志存檔,請使用logging.file.clean-history-on-start
屬性。
4.日志級別
可以在Environment(例如:application.properties)設置logging.level.<logger-name>=<level>,其中level可以為:TRACE,DEBUG,INFO,WARN,ERROR,FATAL或OFF之一。
例如:
logging.level.root=warn logging.level.org.springframework.web=debug logging.level.org.hibernate=error
5.日志組
Spring Boot允許您在Spring中定義日志記錄組Environment
。例如,這是通過將“ tomcat”組添加到您的方式來定義它的方法application.properties
:
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
定義后,您可以使用一行更改該組中所有記錄器的級別:
logging.level.tomcat=TRACE
Spring Boot包含以下預定義的日志記錄組,它們可以直接使用:
Name | Loggers |
---|---|
web |
|
sql |
|
6.自定義日志配置
可以將自定的日志文件放在類路徑的根目錄或者在配置文件中通過logging.config進行制定位置。
可以通過使用org.springframework.boot.logging.LoggingSystem
system屬性來強制Spring Boot使用特定的日志系統。該值應該是實現的完全限定的類名LoggingSystem
。您還可以通過使用值完全禁用Spring Boot的日志記錄配置none
。
注:由於日志記錄是在ApplicationContext
創建之前初始化的,因此無法從@PropertySources
Spring @Configuration
文件中控制日志記錄。更改日志記錄系統或完全禁用它的唯一方法是通過系統屬性。
依據日志系統,下面的日志配置文件將會被加載:
Logging System | Customization |
---|---|
Logback |
|
Log4j2 |
|
JDK (Java Util Logging) |
|
注:如果可能,我們建議您在日志配置中使用-spring變體(例如,使用logback-spring.xml而不是logback.xml)。如果使用標准配置位置,Spring無法完全控制日志初始化。
為了幫助進行定制,一些其他屬性從Spring環境轉移到系統屬性,如下表所示:
Spring Environment | System Property | Comments |
---|---|---|
|
|
The conversion word used when logging exceptions. |
|
|
Whether to clean the archive log files on startup (if LOG_FILE enabled). (Only supported with the default Logback setup.) |
|
|
If defined, it is used in the default log configuration. |
|
|
Maximum log file size (if LOG_FILE enabled). (Only supported with the default Logback setup.) |
|
|
Maximum number of archive log files to keep (if LOG_FILE enabled). (Only supported with the default Logback setup.) |
|
|
If defined, it is used in the default log configuration. |
|
|
Total size of log backups to be kept (if LOG_FILE enabled). (Only supported with the default Logback setup.) |
|
|
The log pattern to use on the console (stdout). (Only supported with the default Logback setup.) |
|
|
Appender pattern for log date format. (Only supported with the default Logback setup.) |
|
|
The log pattern to use in a file (if |
|
|
The format to use when rendering the log level (default |
|
|
Pattern for rolled-over log file names (default |
|
|
The current process ID (discovered if possible and when not already defined as an OS environment variable). |
三、國際化
Spring Boot支持本地化消息,因此您的應用程序可以滿足不同語言首選項的用戶。默認情況下,Spring Boot會在類路徑的根目錄下查找消息資源包的存在。
可以使用spring.message 命名空間來配置資源包的basename和其他幾個屬性,如下例所示:
spring.messages.basename=messages,config.i18n.messages spring.messages.fallback-to-system-locale=false
spring.messages.basename支持以逗號分隔的位置列表,包括包限定符或從類路徑根解析的資源。
四、JSON
Spring Boot提供了與三個JSON映射庫的集成:Gson、Jackson和JSON-B。
Jackson是首選和默認的庫。
1.Jackson
提供了Jackson的自動配置,Jackson是spring-boot-starter-json的一部分。當Jackson位於類路徑上時,將自動配置ObjectMapper bean。為自定義ObjectMapper的配置提供了幾個配置屬性。
2.Gson
提供了Gson的自動配置。當Gson位於類路徑上時,將自動配置Gson bean。幾個spring.gson.*配置屬性用於自定義配置。為了獲得更多的控制,可以使用一個或多個GsonBuilderCustomizer bean。
3.JSON-B
提供了JSON-B的自動配置。當JSON-B API和實現位於類路徑上時,將自動配置Jsonb bean。首選的JSON-B實現是Apache Johnzon,為其提供了依賴項管理。
以使用Gson為例:https://www.jianshu.com/p/0b1f376bce5b