springBoot 配置詳解
一、服務器配置:
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 配置詳解