1. 程式人生 > >springBoot 配置詳解

springBoot 配置詳解

sca logging -c scac ron 管理 utf-8 rac 實現

一、服務器配置:

  1.端口 server.port=8090

  2.上下文 server.servlet.context-path=/config

  3.綁定服務器IP地址 server.address=127.1.1.1

  4.會話過期時間 server.session.timeout=30000

二、Tomcat服務器配置:

  1.打開Tomcat 訪問日誌 server.tomcat.accesslog.enabled=true

  2.訪問日誌所在的目錄 server.tomcat.accesslog.directory=logs

  3.允許HTTP請求緩存到請求列隊的最大個數,默認不限制 server.tomcat.accept-count=

  4.最大連接數,默認不限制,如果一旦連接數到達,剩下的連接將會保存到請求緩存列隊裏,也就是accept-count指定列隊 server.tomcat.max-connections=

  5.最大工作線程數 server.tomcat.max-threads=

  6.HTTP POST 內容最大長度,默認不限制 server.tomcat.max-http-post-size

三、配置啟動信息:

  1.配置springBoot歡迎頁,在resources目錄下新建一個banner.txt、banner.gif(png,jpg)。

   banner.charset=UTF-8 # banner.txt

   banner.location=classpath:banner.txt

   banner.image.location=classpath:banner.gif

   banner.image.width=76

   banner.image.height=76

   banner.image.margin=2

四、(logBack)日誌配置:

  1.設定日誌級別 logging.level.root=info(默認級別) logging.level.org=warn(包名是 org 開頭的類)

  2.指定日誌輸出文件 logging.file=my.log

  3.指定日誌存放路徑 logging.path=e:/temp/log

五、讀取引用配置:

  1.Environment 是一個通用的讀取應用程序運行時的環境變量的接口,可以讀取application.properties、命令行輸入參數、系統屬性、操作系統環境變量等。

 8 public class EnvConfig {
 9 
10     /* AbstractEnvironment 實現類*/
11     @Autowired
12     private Environment environment;
13 
14     public int getServerPort(){
15         return environment.getProperty("server.port",Integer.class);
16     }
17 
18 
19 }

  2.@Value 直接通過註解的方式配置信息到spring管理的Bean中。註意該註解不能在任何Bean中使用, 因為@Value本身是通過 AutowiredAnnotationBeanPostProcessor 實現的,

  凡是 BeanPostProcessor 和 BeanFactoryPostProcessor 的子類都不能使用@Value來註入屬性。

1    @RequestMapping("/getPortValue")
2     public String portValue(@Value("${server.port}") String port){
3         return port;
4     }

  3.@ConfigurationProperties 配置類註解,要使用該註解需要在springBoot啟動類添加註解 @EnableConfigurationProperties(value = {ServerConfig.class,...}) ,之後就可以使用@Autowired引用

 6 @ConfigurationProperties(prefix = "server")
 7 @Configuration
 8 public class ServerConfig {
 9     private String port;
10 
11     public String getPort() {
12         return port;
13     }
14 
15     public void setPort(String port) {
16         this.port = port;
17     }
18 }
15 @RestController
16 @SpringBootApplication
17 @EnableConfigurationProperties(value = ServerConfig.class)
18 public class SpringbootHelloApplication {
19 
20     @Autowired
21     private EnvConfig envConfig;
22 
23     @Autowired
24     private ServerConfig serverConfig;
25 
26     public static void main(String[] args) {
27         SpringApplication.run(SpringbootHelloApplication.class, args);
28     }
29 }

六、springBoot自動裝配:

  1.spring 提供了註解@Configuration,@Bean 再自動裝配

10 @Configuration
11 public class MyConfiguration {
12 
13     @Bean("testBean")
14     public TestBean getTestBean(){
15         return new TestBean();
16     }
17   
18     @Bean
19     public MyService getMyService(DataSource dataSource){
20         return new MyService(dataSource);
21     }
22 }

  2.Bean條件裝配,可以通過有無指定Bean來決定是否配置Bean,使用@ConditionalOnBean,在當前上下文中存在某個對象時,才會實例化一個Bean對象;

  使用@ConditionalOnMissingBean,在當前上下文中不存在某個對象時,才會實例化一個Bean。

  3.class條件裝配是按照某個類是否在Classpath中來決定是否要配置Bean。@ConditionalOnClass,表示當classpath 有指定的類時,配置生效;@ConditionalOnMissingClass則反之。

  4.Environment 裝配,根據Environment 屬性來決定配置是否生效:

 5 /*
 6  * @ConditionalOnProperty 
 7  * 根據 name 來讀取SpringBoot 的Environment 的變量包含的屬性,
 8  * 根據 havingValue 的值比較結果來決定配置是否生效。
 9  * matchIfMissing 為 true 意味著如果 Environment 沒有包含"server.port" ,配置也能生效,默認值為false 
10  */
11 @ConditionalOnProperty(name = "server.port", havingValue = "8090", matchIfMissing = true)
12 public class EnvironmentDemo {
13 }

  5.其他條件配置:@ConditionalOnExpression,當表達式為true時,才會實例化一個Bean;@ConditionalOnJava,當存在指定的Java版本的時候生效。

 1 /*
 2   支持SpEL表達式  
 3 */
 4 @Configuration
 5 @ConditionalOnExpression("${enabled:false}")
 6 public class ConditionalOnExpressionDemo{
 7     @Bean
 8     public MessageMonitor getMessageMonitor(ConfigContext configContext) {
 9         return new MessageMonitor(configContext);
10     }
11 }
4 @ConditionalOnJava(range = ConditionalOnJava.Range.EQUAL_OR_NEWER,value = JavaVersion.EIGHT)
5 public class ConditionalOnJavaDemo {
6 }

  6.聯合多個條件自動裝配:

 1 /*
 2  @Configuration 表明這是一個配置類
 3  @AutoConfigureAfter 表明需要在 RedisAutoConfiguration 配置類之後再生效
 4  @Conditional 是一個更為通用的條件類,可以實現 Condition 接口,重寫matches方法 自定義條件
 5 */
 6 @Configuration
 7 @AutoConfigureAfter(RedisAutoConfiguration.class)
 8 @ConditionalOnBean(RedisTemplate.class)
 9 @ConditionalOnMissingBean(CacheManager.class)
10 @Conditional(CacheCondition.class)
11 public class RedisCacheConfiguration {}

  7.實現Condition 接口重寫matches,ConditionContext類可以獲取多個輔助類。 

 1 @Configuration
 2 public class ConditionDemo {
 3     @Bean
 4     @Conditional(EncryptCodition.class)
 5     public TestBean getTestBean(){
 6         return new TestBean();
 7     }
 8 
 9     static class EncryptCodition implements Condition{
10         @Override
11         public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
12             Resource res = conditionContext.getResourceLoader().getResource("condition.txt");
13             Environment env = conditionContext.getEnvironment();
14             ConfigurableListableBeanFactory configurableListableBeanFactory =  conditionContext.getBeanFactory();
15             return res.exists() && env.containsProperty("encrypt.enable");
16         }
17     }
18 }

   

  

springBoot 配置詳解