作用:修改SpringBoot自动配置的默认值;
YAML(YAML Ain’t Markup Language)
YAML A Markup Language:是一个标记语言
YAML isn’t Markup Language:不是一个标记语言;
标记语言:
以前的配置文件;大多都使用的是
YAML:以数据为中心,比json、xml等更适合做配置文件;
key冒号空格value(key: value):表示一个键值对。
以空格的缩进来控制层级关系(空格数没限制):只要左侧对齐的一列数据,都是同一个层级的值。
属性和值区分大小写;
普通值的写法(数字,字符串,布尔): key: value (正常的key-value形式)
字符串默认不用加上单引号或双引号;
双引号:不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思。例如 name: “wang n hao” 输出wang 换行 hao;
单引号:会转义特殊字符,特殊字符最终只是一个普通字符串数据,例如 name: ‘wang n hao’ 输出 wang n hao
对象、Map 的写法:key: 在下一行直接写对象的属性值(是key: value的形式),注意缩进
people: name: wanghaoage: 30
在一行的写法:和JSON的数据格式很想
people: {name: wanghao,age: 30}
用- 值表示数组中的一个元素;
peoples: - people1- people2
行内写法:
peoples: [people1,people2]
上面这么多理论了,下面用理论指导下实践吧:
配置文件编写如下:
people:name: xiaowangage: 30isboss: falsebirth: 2018/03/27maps: {k1: v1,k2: v2}list:- l1- l2
javaBean: 省略getter和setter方法
/*** @ConfigurationProperties :将类中所有属性和配置文件中的属性进行绑定(默认从全局配置文件中获取)* prefix :配置文件中那个下面的所有属性进行映射* @Component:将类作为SpringBoot的组件* 只有容器中的组件才能提供 @ConfigurationProperties 功能*/
@Component
@ConfigurationProperties(prefix = "people")
public class People {private String name;private Integer age;private boolean isboss;private Date birth;private Map maps;private List list;
}
运行输出的对象结果为:
People{name=‘xiaowang’, age=30, isboss=false, birth=Tue Mar 27 00:00:00 CST 2018, maps={k1=v1, k2=v2}, list=[l1, l2]}
properties 文件怎么配置呢?
people.name=张
people.age=30
people.isboss=false
people.birth=2018/03/27
people.maps.k1=v1
people.maps.k2=测试
people.list=a,b,c
现在执行运行结果为:
People{name='å¼ ', age=30, isboss=false, birth=Tue Mar 27 00:00:00 CST 2018, maps={k1=v1, k2=测试}, list=[a, b, c]}
原因: IDEA 中默认的编码方式是utf-8,但是之前我们用的properties 是ascii 编码,所以需要去Settings 修改 File Encodings 如下提示的地方,注意改过之后项目要重新Build,下图有英文提醒。
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 单个指定 |
松散绑定(松散语法)(属性的大写字母和中横线是等价的) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 (属性支持JSR303注解校验) | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
如果是批量注入就用@ConfigurationProperties,如果某个业务中使用配置文件中的某个值就用@Value。·
SpEL(Spring Expression Language):即Spring表达式语言,是比JSP的EL更强大的一种表达式语言,@Value ("#{表达式}")时可以使用,例如@Value ("#{12*3}") 表达式可以有很多种(字符串连接,算数运算,比较运算,条件运算,正则表达等等);
配置文件中可以使用随机数: 随机字符串 ${random.value},随机int ${random.int},随机long ${random.long},随机10以内的随机数 ${random.int(10)},10到20的随机数 ${random.int[10,20]}。
属性配置占位符:
1)可以在配置文件中引用前面配置过的属性;
2)${people.name:默认值} 来指定找到不到属性时的默认值;
profile 是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境
1)多profile文件形式:application-{profile}.properties/yml
2)yml 支持多文档快方式:在一个文档中以— 作为文档快的分块标识 (spring:profiles:dev 作为分块环境),如下
server:port: 8081
spring:profiles:active: dev---
server:port: 8082
spring:profiles: dev
3)激活指定profile : 图中与命令行和虚拟机参数配置的地方
1.在配置文件中指定:spring.profiles.active=dev
2.命令行 :
java -jar spring-boot.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数
3.虚拟机参数:-Dspring.profiles.active=dev
Spring boot 启动会扫描一下位置的application.properties或者l文件为Spring boot的默认配置文件
file:./config/ 当前项目下的config 文件夹下(就是和src平级的目录)
file:./ 当前项目文件夹下(直接在项目下)
classpath:/config/ 类路径的config下 (在项目的 resource 的 config 下)
classpath:/ 类路径下 (在项目的 resource 下)
以上按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容,多个位置的配置文件形成互补配置。
可以通过配置fig.location 来改变配置路径(在配置文件中修改或者是命令行的方式)。
1.命令行参数:所有的配置都可以在命令行上进行指定 java -jar spring-boot.jar --server.port=8081 --t-path=/hello
多个配置用空格分开;格式为 --配置项=值
2.java:comp/env的JNDI属性:是一个J2EE环境的定义
3.Java系统属性Properties()):就是系统环境的一些信息
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
配置加载顺序是:由包外向包内寻找,优先加载带profile的文件。
6.jar包外部的application-{profile}.properties或l(带spring.profile)配置文件
7.jar包内部的application-{profile}.properties或l(带spring.profile)配置文件
8.jar包外部的application.properties或l(不带spring.profile)配置文件
9.jar包内部的application.properties或l(不带spring.profile)配置文件
10.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性
官方参考文档
配置文件可以配置那些配置,如官网参考配置(下面地址)
官方参数配置参考
1)SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。
2)@EnableAutoConfiguration 作用:
利用EnableAutoConfigurationImportSelector给容器中导入一些组件。
可以导入selectImports()方法的内容;
List configuration = getCandidateConfigurations(annotationMetadata,attributes)获取候选的配置。
SpringFactoriesLoader.loadFactoryName()
//扫描所有jar包类路径下 META-INF/spring.factories
//把扫描到的这些文件的内容包装成properties对象
//从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中
将类路径下META-INF/spring.factories里面配置的所有EnableAutoConfiguration 的值加入到容器中;
# Auto Configure
org.springframework.boot.autoconfigure.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.t.ConfigurationPropertiesAutoConfiguration,
org.springframework.t.LifecycleAutoConfiguration,
org.springframework.t.MessageSourceAutoConfiguration,
org.springframework.t.PropertyPlaceholderAutoConfiguration,
org.springframework.uchbase.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.uchbase.CouchbaseDataAutoConfiguration,
org.springframework.boot.uchbase.CouchbaseReactiveDataAutoConfiguration,
org.springframework.boot.uchbase.CouchbaseReactiveRepositoriesAutoConfiguration,
org.springframework.boot.uchbase.CouchbaseRepositoriesAutoConfiguration,
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,
org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRepositoriesAutoConfiguration,
org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRestClientAutoConfiguration,
org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,
org.springframework.boot.MongoDataAutoConfiguration,
org.springframework.boot.MongoReactiveDataAutoConfiguration,
org.springframework.boot.MongoReactiveRepositoriesAutoConfiguration,
org.springframework.boot.MongoRepositoriesAutoConfiguration,
org.springframework.boot.4j.Neo4jDataAutoConfiguration,
org.springframework.boot.4j.Neo4jReactiveDataAutoConfiguration,
org.springframework.boot.4j.Neo4jReactiveRepositoriesAutoConfiguration,
org.springframework.boot.4j.Neo4jRepositoriesAutoConfiguration,
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcDataAutoConfiguration,
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcRepositoriesAutoConfiguration,
org.springframework.boot.dis.RedisAutoConfiguration,
org.springframework.boot.dis.RedisReactiveAutoConfiguration,
org.springframework.boot.dis.RedisRepositoriesAutoConfiguration,
org.springframework.boot.st.RepositoryRestMvcAutoConfiguration,
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,
org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration,
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,
org.springframework.vy.template.GroovyTemplateAutoConfiguration,
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.dec.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.jersey.JerseyAutoConfiguration,
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,
org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,
org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration,
org.springframework.boot.bedded.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.embedded.EmbeddedMongoAutoConfiguration,
org.springframework.MongoAutoConfiguration,
org.springframework.MongoReactiveAutoConfiguration,
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,
org.springframework.4j.Neo4jAutoConfiguration,
org.springframework.boot.autoconfigurety.NettyAutoConfiguration,
org.springframework.jpa.HibernateJpaAutoConfiguration,
org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,
org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration,
org.springframework.boot.autoconfigure.r2dbc.R2dbcTransactionManagerAutoConfiguration,
org.springframework.boot.autoconfigure.rsocket.RSocketMessagingAutoConfiguration,
org.springframework.boot.autoconfigure.rsocket.RSocketRequesterAutoConfiguration,
org.springframework.boot.autoconfigure.rsocket.RSocketServerAutoConfiguration,
org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfiguration,
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,
org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,
org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,
org.springframework.boot.active.ReactiveSecurityAutoConfiguration,
org.springframework.boot.active.ReactiveUserDetailsServiceAutoConfiguration,
org.springframework.boot.autoconfigure.security.rsocket.RSocketSecurityAutoConfiguration,
org.springframework.boot.autoconfigure.security.saml2.Saml2RelyingPartyAutoConfiguration,
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.active.ReactiveOAuth2ClientAutoConfiguration,
org.springframework.boot.autoconfigure.source.servlet.OAuth2ResourceServerAutoConfiguration,
org.springframework.boot.autoconfigure.active.ReactiveOAuth2ResourceServerAutoConfiguration,
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,
org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration,
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration,
org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration,
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,
org.springframework.ansaction.TransactionAutoConfiguration,
org.springframework.ansaction.jta.JtaAutoConfiguration,
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,
org.springframework.boot.bedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,
org.springframework.boot.active.HttpHandlerAutoConfiguration,
org.springframework.boot.active.ReactiveWebServerFactoryAutoConfiguration,
org.springframework.boot.active.WebFluxAutoConfiguration,
org.springframework.boot.ErrorWebFluxAutoConfiguration,
org.springframework.boot.active.function.client.ClientHttpConnectorAutoConfiguration,
org.springframework.boot.active.function.client.WebClientAutoConfiguration,
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,
org.springframework.boot.autoconfigure.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.active.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
每一个这样的xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中,用他们来做自动配置。
3)每一个自动配置类进行自动配置功能:
4)以HttpEncodingAutoConfiguration 为例子解释自动化配置原理;
@Configuration(proxyBeanMethods = false
) //表示这是一个配置类(和之前的配置文件一样),也可以给容器中添加组件
@EnableConfigurationProperties({ServerProperties.class}) //启动指定类
//ConfigurationProperties功能;将配置文件中的对应的值和ServerProperties绑定。@ConditionalOnWebApplication(//Spring 底层Conditional 注解,根绝不同的条件,如果满足指定条件,整个配置类里面的配置才会生效。type = Type.SERVLET //判断当是否是web应用。
)
@ConditionalOnClass({CharacterEncodingFilter.class}) //判断当前项目是否有这个(CharacterEncodingFilter)类
//CharacterEncodingFilter :springmvc中进行乱码解决的过滤器。
@ConditionalOnProperty(//判断配置文件中是否存在ding配置,若不存在,判断也是成立的prefix = "ding",value = {"enabled"},matchIfMissing = true//即使配置文件中不配置abled=true,也是生效的。
)
根据当前不同条件判断,决定这个配置类是否生效。
一但这个配置类讪笑,这个配置类就会给容器中添加各种组件,这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性是和配置文件绑定的。
5)所有在配置文件中能配置的属性都是在xxxProperties类中封装着,配置文件能配置那些属性就可以参照某个功能对应的这个属性类。
SpringBoot精髓:
1)SpringBoot 启动会加载大量的自动配置类信息;
2)看需要的功能在SpringBoot默认配置中是否有;
3)再来看这个自动配置类中到底配置那些组件(只要我们要用的组件有某些属性,就不需要再来配置);
4)给容器中挂自动配置类添加组件的时候,会从properties类中获取某些属性。可以在配置文件中指定这些属性的值;
总结:xxxAutoConfiguration :自动配置类,给容器添加组件;xxxProperties :封装配置文件中相关属性;
1)@Conditional (spring 原生注解)派生注解
作用:必须是@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(在properties上添加)属性;让控制台打印自动配置报告。
============================
CONDITIONS EVALUATION REPORT
============================Positive matches:
-----------------AopAutoConfiguration matched:- @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)AopAutoConfiguration.ClassProxyingConfiguration matched:- @ConditionalOnMissingClass did not find unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition)- @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)
里面包含配上上的配置类和没有匹配上的配置类的详情。
时间:2021-10-08
耗时:5小时
本文发布于:2024-01-29 12:45:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170650353015375.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |