SpringBoot學習筆記(2) Spring Boot的一些配置

外部配置

spring Boot允許使用properties文件、yaml文件或者命令行參數作爲外部配置

使用@Value註解,可以直接將屬性值注入到你的beans中,並通過SpringEnvironment抽象或綁定到結構化對象來訪問。

以前使用Spring的時候需要通過@PropertySource指明properties文件位置,然後通過@value注入.

 

常規屬性配置

properties文件中增加幾個屬性

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. server.port=8081  
  2. server.context-path=/demo  
  3. #聲明一個name屬性  
  4. user.name=張三  
  5. user.age=21  

Java

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. package com.ibigsea.bootdemo;  
  2.   
  3. import org.springframework.beans.factory.annotation.Value;  
  4. import org.springframework.boot.SpringApplication;  
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.RestController;  
  8.   
  9. /** 
  10.  * 是Spring Boot項目的核心註解,主要是開啓自動配置 
  11.  */  
  12. @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan  
  13. @RestController  
  14. public class App {  
  15.       
  16.     @Value("${user.name}")  
  17.     private String name;  
  18.   
  19.     @Value("${user.age}")  
  20.     private Long age;  
  21.       
  22.     @RequestMapping("/")  
  23.     public String index(){  
  24.         return "Hello Spring Boot, name is " + name + ", age is "+ age;  
  25.     }  
  26.       
  27.     public static void main(String[] args) {  
  28. //      SpringApplication app = new SpringApplication(App.class);  
  29. //      app.setBannerMode(Mode.OFF);  
  30. //      app.run(args);  
  31.         SpringApplication.run(App.class, args);  
  32.     }  
  33. }  

運行結果:


除此之外,Spring Boot 還提供了基於類型安全的配置方式,通過@ConfigurationPropertiesproperties屬性和一個Bean及其屬性關聯,從而實現類型安全的配置

 

在上面的情景下新增一個UserSetting

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. package com.ibigsea.bootdemo;  
  2.   
  3. import org.springframework.boot.context.properties.ConfigurationProperties;  
  4. import org.springframework.stereotype.Component;  
  5.   
  6. @Component  
  7. //通過該註解價值properties文件內的配置  
  8. //通過prefix執行properties配置的前綴  
  9. @ConfigurationProperties(prefix = "user")  
  10. public class UserSetting {  
  11.     private String name;  
  12.     private Long age;  
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19.     public Long getAge() {  
  20.         return age;  
  21.     }  
  22.     public void setAge(Long age) {  
  23.         this.age = age;  
  24.     }  
  25. }  

使用


運行結果




日誌配置


Spring boot默認的輸出格式

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. 2016-07-04 23:47:27.195  INFO 28916 --- [           main] com.ibigsea.bootlog.App                  : Starting App on sea-pc with PID 28916 (E:\workspace\myworkspace\bootlog\target\classes started by bigsea in E:\workspace\myworkspace\bootlog)  
  2. 2016-07-04 23:47:27.201  INFO 28916 --- [           main] com.ibigsea.bootlog.App                  : No active profile set, falling back to default profiles: default  
  3. 2016-07-04 23:47:27.315  INFO 28916 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@75592f8b: startup date [Mon Jul 04 23:47:27 CST 2016]; root of context hierarchy  
  4. 2016-07-04 23:47:28.653  INFO 28916 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]  
  5. 2016-07-04 23:47:30.227  INFO 28916 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)  
  6. 2016-07-04 23:47:30.245  INFO 28916 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat  
  7. 2016-07-04 23:47:30.245  INFO 28916 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.30  
  8. 2016-07-04 23:47:30.371  INFO 28916 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext  

  • 時間日期 — 精確到毫秒
  • 日誌級別 — ERROR, WARN, INFO, DEBUG or TRACE
  • 進程ID
  • 分隔符 — --- 標識實際日誌的開始
  • 線程名 — 方括號括起來(可能會截斷控制檯輸出)
  • Logger名 — 通常使用源代碼的類名
  • 日誌內容

 

默認情況下ERROR, WARNINFO級別的消息會輸出到控制檯

可以通過命令行開啓DEBUG或者在properties文件中添加

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. Jar -jar xx.jar --debug  

Properties文件中添加 debug=true 即可

如果想要輸出到日誌文件中,那麼需要在properties文件中設置logging.filelogging.path屬性


控制日誌級別

通過 logging.level.*= LEVEL(LEVELTRACE,DEBUG,INFO,WARN,FATAL,OFF)中的一個

這樣表示項目中所有的日誌級別都是一樣的.也可以精準控制到具體的一塊

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. logging.level.org.springframework.web: DEBUG //org.springframework.web包下面的日誌級別是DEBUG的  
  2. logging.level.org.hibernate: ERROR //org.hibernate包下面的日誌級別是ERROR  
  3. logging.level.com.ibigsea.*: INFO //com.ibigsea包下面的日誌級別是INFO  

除了Spring Boot默認的以外,還可以激活其他各種日誌系統

由於日誌是在ApplicationContext被創建之前初始化,所以不可能在Spring@Configuration文件中,通過系統屬性和傳統的外部配置文件依然可以讓日誌系統正常工作


這句話一直無法理解,查詢資料也大都是沒解釋清楚,猜想的話 應該是在pom裏面添加對應日誌依賴,然後在項目添加對應的配置文件比如這樣的


Spring boot 會自動激活這個日誌系統

Profile配置

ProfileSpring用來針對不同環境對不同配置提供支持的,全局Profile配置使用

application-{profile}.properties :application-prod.properties

 

在本地模擬出一個開發環境和生產環境

創建application-prd.properties 和 application-dev.properties

項目結構


application-dev.properties

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. server.port=8081  

application-prd.properties

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. server.port=8082  

application.properties

[plain] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. spring.profiles.active=prd  

啓動結果


修改spring.profiles.activedev並啓動


除了上面這種配置方式,我們還有一種更簡便的方式來配置多種環境,通過命令行參數配置

刪除多餘的properties文件


application.yml

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. server :  
  2.  port : 8081  
  3. ---  
  4. spring :  
  5.   profiles : dev  
  6. server :  
  7.   port : 8082  

默認是prd環境 


在啓動的時候增加參數 spring.profiles.active=dev


右擊顯示菜單選擇run configurations

添加命令行參數 




OK 實驗成功

將程序打包之後 通過 java -jar xx.jar --spring.profiles.active=dev的方式啓動

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章