二、配置文件

1、配置文件

Spring Boot使用一个全局的配置文件,配置文件名是固定的;

  • application.properties
  • application.yml

配置文件的作用:修改SpringBoot自动配置的默认值;

SpringBoot在底层都给我们配置好;

YAML(YAML Ain't Markup Language)

​ YAML A Markup Language:是一个标记语言

​ YAML isn't Markup Language:不是一个标记语言

标记语言:

​ 以前的配置文件,大多都使用的xxx.xml文件;

​ YAML:以数据为中心,比json、xml等更适合做配置文件;

​ YAML:配置例子

server:port: 8082

XML:对比写法

<server><port>8082</port>
</server>

2、YAML语法

1、基本语法

k:(空格)v:表示一堆键值对(空格必须有);

以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

server:port:8082path:/hello

属性和值也是大小写敏感

2、值的写法

字面量:普通的值(数字,字符串,布尔)

​ K:v:字面直接来写;

​ 字符串默认不用加上单引号或者双引号;

​ “”:双引号:不会转移字符串里面的特殊字符;特殊字符会作为本身想表达的意思

​ name:"zhangsan \n lisi" : 输出: zhangsan 换行 lisi

​ ‘’:单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据

​ name:"zhangsan \n lisi" : 输出: zhangsan \n lisi

对象、M安排(属性和值)(键值对):

​ k:v :在下一行来写对象的属性和值的关系;注意缩进

​ 对象还是k:v的方式

freiends:lastName: zhangsanage: 20

行内写法:

friends:{lastName: zhangsan,age: 18}
数组(list,set):

用- 值表示数组中的一个元素(空格-空格)

pets:- cat- dog- pig

行内写法(空格[])

pets: [cat,dog,pig]

3、获取配置文件值注入

配置文件(yml)

person:#last-name: zhangsan 也是可以的,在yaml中,自动认为-n和N是一样的lastName: zhangsanage: 18boss: falsebirth: 2017/12/12maps: {k1: v1,k2: 12}lists:- lisi- zhaoliudog:name: 汪汪age: 3

配置文件(properties)

# 配置person的值
person.last-name=张三
person.age=25
person.birth=2001/05/08
person.boss=false
person.maps.k1=v1
person.maps.k2=88
person.lists=a,b,2
#person.dog.name=狗狗
#person.dog.age=3

1、但是properties配置文件在idea中默认utf-8可能会乱码

因此要对idea的setting文件进行编码配置

值得注意的是,如果两个配置文件同时配置了person的值,那么yml的值会被properties里面的值覆盖,但是若如上图dog的值properties没有,就会自动匹配yml里面的dog值注入

javaBean

/***** 将配置文件中配置的每一个属性的值,映射到这个组件中* @ConfigurationProperties 告诉SpringBoot将奔雷中的所有属性和配置文件中相关的配置进行绑定;*      prefix = "person":配置文件中那个下面的所有属性进行一一映射**   只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;*/
@Component
@ConfigurationProperties(prefix = "person")
@Data
public class Person {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;}

我们可以导入配置文件处理器,以后编写配置就有提示了

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

此外,如果不使用@ConfigurationProperties(prefix = "person")注解,也可以用value来注入配置文件里面的值

@Component
//@ConfigurationProperties(prefix = "person")
@Validated //表示person里面的值需要校验(JSR303数据校验)
@Data
public class Person {/***** <bean class="person">*        <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#          *        {SpEL}"></property>*  </bean>*/@Email  //表示lastName属性必须是邮箱格式@Value("${person.last-name}")private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;
}

2、@Value获取值和@ConfigurationProperties获取值比较

Feature @ConfigurationProperties @Value
功能 批量注入篇日志文件中的属性 一个个指定
松散绑定(松散语法/驼峰命名法) 支持 不支持
SpEL (例如: #{11*2} ) 不支持 支持
JSR303数据校验 支持 2.1.6以上版本支持
复杂类型封装(例如Map) 支持 不支持

上图为松散语法匹配规则。

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在业务逻辑中需要获取一下配置文件中的某项之,使用@value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

3、配置文件注入值数据校验

@Component
@ConfigurationProperties(prefix = "person")
@Validated //表示person里面的值需要校验(JSR303数据校验)
@Data
public class Person {@Email  //表示lastName属性必须是邮箱格式private String lastName;

4、@PropertySource&@ImportResouce

1、@PropertySource:加载指定的配置文件

@PropertySource(value = "{classpath:person.properties}")
@Component
@ConfigurationProperties(prefix = "person")
@Validated //表示person里面的值需要校验(JSR303数据校验)
@Data
public class Person {/***** <bean class="person">*        <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>*  </bean>*/
//    @Email  //表示lastName属性必须是邮箱格式
//    @Value("${person.last-name}")private String lastName;private Integer age;private Boolean boss;private Date birth;
2、@ImportResouce:导入Spring的配置文件,让配置文件里面的内容生效;

Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

如果想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效

现在我们已经不推荐编写Spring的配置文件了

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="helloService" class="com.example.springbootprojectquick.service.HelloService"></bean>
</beans>

SpringBoot推荐给容器中添加组件的方式:推荐使用全注解的方式

1、配置类======Spring配置文件

2、使用@Bean注解给容器中添加组件

/***** @Configuration 指明当前类是一个配置类;就是来替代之前的Spring配置文件** 以前在xml配置文件中用<bean></bean>标签添加组件*/
@Configuration
public class MyAppConfig {//将方法的返回值添加到容器中:容器中这个组件默认的id就是方法名@Beanpublic HelloService helloService(){System.out.println("配置类@Bean给容器中添加组件了...");return new HelloService();}
}

4、配置文件占位符

1、随机数

${random.value}、${random.int}、${random.long}、
${random.int(10)}、${random.int(1024,65536)}、

2、占位符获取之前配置的值,如果没有可以使用:指定默认值

person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=2001/05/08
person.boss=false
person.maps.k1=v1
person.maps.k2=88${person.age}
person.lists=a,b,2
#如果person.hello没有值,则使用默认值hello
person.dog.name=${person.hello:hello}_狗狗
person.dog.age=3

5、Profile

profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境

1、多profile文件形式

我们在著配置文件编写的时候,文件名可以是

  • 格式:application-{profile}.properties/yml:

    application-dev.properties、application-prod.properties

    默认使用application.properties的默认配置文件 ,如果要使用其他几个配置文件要在配置中激活

2、yml支持多profile文档块模式:

server:port: 8082
spring:profiles:active: prod
---
server:port: 8081
spring:profiles: prod
---
server:port: 8083spring:profiles: dev

3、激活方式

  • 命令行 -- spring.properties.active=dev

    • 第一种,在run的配置文件中添加 -- spring.properties.active=dev

    • 第二种,在cmd命令行输入java-jar spring-boot-project-quick-0.0.1-SNAPSHOT.jar --spring.properties.active=dev

      可以直接在测试的时候,配置传入命令行参数

  • 在默认配置文件中写上

    ​ Spring.properties.active=dev

  • 虚拟机(jvm)参数

    ​ -Dspring.properties.active=dev

6、配置文件加载位置

  • springBoot启动会扫描一下位置的application.properties或者application.yml文件作为Spring Boot的默认配置文件

    • -file:../config/ ==》最高优先级,如果四个配置文件同时存在,且配置冲突的情况下,它生效
    • -file:../
    • -classpath:/config
    • -classpath:/

    优先级由高到低,高优先级的配置会覆盖低优先级的配置:

    SpringBoot会从这四个位置全部加载主配置文件:互补配置

我们还可以通过spring.config.location来改变默认的配置文件位置

项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

7、外部配置加载顺序

SpringBoot也可以从一下位置加载配置;优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。

1、命令行参数

java-jar spring-boot-project-quick-0.0.1-SNAPSHOT.jar --server.port=8087 --server.servlet.context-path=/abc

多个配置用空格分开, --配置项=值

2、来自java:comp/env的NDI属性

3、Java系统属性 (System.getProperties())

4、操作系统环境变量

5、RandomValuePropertySource配置的random.*属性值

由jar包外向jar包内进行寻找

优先加载带profile的

6、jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

7、jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

再来加载不带profile的

8、jar包外部的application.properties或application.yml(不带spring.profile)配置文件

9、jar包内部的application.properties或application.yml(不带spring.profile)配置文件

10、@Configuration注解类上的@PropertySource

11、通过SpringApplication.setDefaultProperties指定的默认属性

所有支持的配置加载来源

参考官方文档

8、自动配置的原理

配置文件到底能写什么?怎么写?自动配置的原理;

配置文件能配置的属性参照

1、自动配置原理:

1)、SpringBoot启动的时候记载主配置类,开启了自动配置功能@EnableAutoConfiguration

2)、@EnableAutoConfiguration作用:

​ 利用AutoConfigurationImportSelector给容器导入一些组件?

​ 详细可以查看selectImports()方法的内容;

    AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(autoConfigurationMetadata,      annotationMetadata);

​ 继续点进getAutoConfigurationEntry()方法

List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);获取候选的配置
        ```java

SpringFactoriesLoder.loadFactoryNames()
扫描所有jar包类路径下 META-INF/spring.factories
把扫描到的这些文件的内容包装成properties对象
从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加到容器中
```

将类路径下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到了容器中

org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudServiceConnectorsAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,\
org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,\
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,\
org.springframework.boot.autoconfigure.reactor.core.ReactorCoreAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityRequestMatcherProviderAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration,\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerAutoConfiguration,\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration,\
org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.client.WebServiceTemplateAutoConfiguration# Failure analyzers
org.springframework.boot.diagnostics.FailureAnalyzer=\
org.springframework.boot.autoconfigure.diagnostics.analyzer.NoSuchBeanDefinitionFailureAnalyzer,\
org.springframework.boot.autoconfigure.jdbc.DataSourceBeanCreationFailureAnalyzer,\
org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer,\
org.springframework.boot.autoconfigure.session.NonUniqueSessionRepositoryFailureAnalyzer

!

每一个这样的xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;用他们来做自动配置;

3)、每一个自动配置类进行自动配置功能;

4)、以HttpEncodingAutoConfiguration(Http编码自动配置)为例解释自动配置原理

7hProperties(HttpProperties.class)  //启用指定类的ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)  //spring底层有个@Conditional注解(可参照spring注解版):根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效;    判断当前应用是否是web应用,如果是,当前配置类生效@ConditionalOnClass(CharacterEncodingFilter.class)  //判断当前项目有没有这个类  (CharacterEncodingFilter:springMVC中进行乱码解决的过滤器@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)  //判断配置文件中是否存在spring.http.encoding.enabled;如果不存在,判断也是成立的
//即使我们配置文件中不配置spring.http.encoding.enabled=true,也是自动生效的
public class HttpEncodingAutoConfiguration {//他已经和SpringBoot的配置文件映射了private final HttpProperties.Encoding properties;//在只有一个有参构造的情况下,参数的值就会从容器中拿public HttpEncodingAutoConfiguration(HttpProperties properties) {this.properties = properties.getEncoding();}@Bean   //给容器中添加一个组件,这个组件的某些值需要从properties中获取@ConditionalOnMissingBeanpublic CharacterEncodingFilter characterEncodingFilter() {CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();filter.setEncoding(this.properties.getCharset().name());filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));return filter;}

根据当前不同的条件判断,决定这个配置类是否生效?

一旦这个配置类生效,这个配置类就会给容器中添加各种组件,这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;

5)、所有在配置文件中能配置的属性都是在xxxxProperties类中封装着;配置文件能配置什么就可以参照某个功能对应的这个属性类

@ConfigurationProperties(prefix = "spring.http")   //从配置文件中获取指定的值和bear的属性进行绑定
public class HttpProperties {
/*** Configuration properties for http encoding.*/public static class Encoding {public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;

精髓:

1)、SpringBoot启动会加载大量的自动配置类

2)、我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;

3)、我们再来看这个自动配置类中到底配置了那些组件;(只要我们要用的组件有,我们就不需要再来配置了)

4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值;

xxxxAutoConfiguration:自动配置类;

给容器中添加组件

xxxxProperties:封装配置文件中相关属性;

2、细节

1、@Conditional派生注解(Spring注解版原声的@Coditional作用)

作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置类里面的所有内容才生效;

@Conditional扩展注解 作用(判断是否满足当前指定条件)
@ConditionalOnJava 系统的java版本是否符合要求
@ConditionalOnBean 容器中存在指定Bean
@ConditionalOnMissingBean 容器中不存在指定Bean
@ConditionalOnExpression 满足SpEL表达式指定
@ConditionalOnClass 系统中有指定的类
@ConditionalOnMissingClass 系统中没有指定的类
@ConditionalOnSingleCandidate 容器中只有一个指定的Bean,或者这个Bean是首选Bean
@ConditionalOnProperty 系统中指定的属性是否有指定的值
@ConditionalOnResource 类路径下是否存在指定资源文件
@ConditionalOnWebApplication 当前是web环境
@ConditionalOnNotWebApplication 当前不是web环境
@ConditionalOnJndi JNDI存在指定项

自动配置类必须在一定的条件下才能生效;

我们可以通过启用debug=true属性,来让控制台打印自动配置报告,我们就可以很方便的知道哪些自动配置类生效

============================
CONDITIONS EVALUATION REPORT
============================Positive matches: (自动配置类当前启用的配置)
-----------------CodecsAutoConfiguration matched:- @ConditionalOnClass found required class 'org.springframework.http.codec.CodecConfigurer' (OnClassCondition)CodecsAutoConfiguration.JacksonCodecConfiguration matched:- @ConditionalOnClass found required class 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition)
......Negative matches:(没有启动,没有匹配成功的自动配置类)
-----------------ActiveMQAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.jms.ConnectionFactory' (OnClassCondition)AopAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'org.aspectj.lang.annotation.Aspect' (OnClassCondition)
......

转载于:https://www.cnblogs.com/guoyinghome/p/11225242.html

spring boot 配置相关推荐

  1. Spring Boot 配置元数据指南

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 遗失的拂晓 来源 | 公众号「锅外的大佬」 1. 概览 在编写 Spring Bo ...

  2. java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  3. Spring Boot 配置随机数那些小技巧

    转载自  Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位M ...

  4. 19年8月 字母哥 第三章 spring boot 配置原理实战 用热点公司网不行

    第三章 spring boot 配置原理实战 3.1.结合配置加载讲解bean自动装配原理 3.2.详解YAML语法及占位符语法 3.3.获取自定义配置的两种实现方法 3.4.配置文件注入值数据校验 ...

  5. 在Spring boot 配置过滤器(filter)

    在spring boot 配置servlet filter 逻辑上与配置spring 是一样的. 不过相比spring 更加简化配置的难度. 这里只需要两步 1 创建一个自定义顾虑器并继承spring ...

  6. mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  7. spring boot配置对上传文件的大小限制

    spring boot配置对上传文件的大小限制 spring-boot 2.0之前 Spring Boot1.4版本后配置更改为(默认单个文件最大1Mb,单次请求文件总数大小最大10Mb): spri ...

  8. spring boot配置logback日志

    spring boot配置logback日志 在上一篇spring boot入门里提过,Spring Boot默认的日志打印是logback,所以配置logback日志会很简单,但是也有注意的地方. ...

  9. spring boot配置druid(德鲁伊)

    spring boot配置druid(德鲁伊) 关于druid的介绍请看 阿里巴巴温少访谈 1.引入相关依赖,全部依赖是上一篇spring boot+mybatis依赖的基础上,再加上下边的依赖,如下 ...

  10. spring boot配置mybatis和事务管理

    spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...

最新文章

  1. Linux EXT2文件系统结构分析(详情见附件)
  2. web前端黑客技术揭秘 10.关于防御
  3. C 语言编程 — 高级数据类型 — 结构体与位域
  4. SE43自定义sap菜单
  5. xxx系统可用性和易用性分析
  6. Android消息处理机制(Handler、Looper、MessageQueue与Message)
  7. 第3章:Kubernetes监控与日志管理
  8. 使用java进行婚礼庆祝_#102030:在30天内运行20 10K,庆祝Java 20年
  9. linux grub error 22,Linux系統grub常見錯誤問題解決
  10. 如何使用JDK提供的帮助文档
  11. 判别分析分为r型和q型吗_r型聚类分析
  12. 计算机电子贺卡制作圣诞节,圣诞电子贺卡_圣诞节英文电子贺卡怎么制作
  13. PHP二维数组用某个字段的值当做键名
  14. 前端4-2-5:关于CSS 长度单位总结,有你就够了!
  15. matplotlib——坐标负数显示问题Unicode minus
  16. UI设计师有哪些就业方向选择?
  17. 这些java基础编程练习题你都会了吗?
  18. 详解HDR的三个标准——HLG/HDR10/Dolby Vision
  19. Matlab:拉盖尔-高斯光束光阑衍射
  20. 【OFF三维显示】通过MATLAB读取off文件生成三视图 提取轮廓线

热门文章

  1. c语言学习的计划,c语言重新学习计划(转帖)
  2. set up BU Printer on ubuntu
  3. 创建窗口,输入一个无符号整数,输出其对应的二进制数
  4. sas 怎么连接mysql_sas连接MySQL
  5. mysql innodb 索引组织表_Mysql InnoDB引擎 -索引组织表
  6. vivox50pro鸿蒙系统,钱包卡包都承包 vivo X50 Pro+多功能NFC玩法多
  7. python用户取消了安装_python的安装
  8. C++ ---------------- 成员函数指针揭秘
  9. Android 计算地球上两点的距离
  10. jmeter 聚合报告说明_Jmeter 测试结果分析之聚合报告简介