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 }