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 }

 

   

  

 

posted @ 2019-01-13 15:01  吴wuwu  阅读(347)  评论(0编辑  收藏  举报