-
兩種配置文件
SpringBoot使用一個全局的配置文件外遇,配置文件名是固定的注簿;
- application.properties
- application.yml
配置文件的作用:修改SpringBoot自動配置的默認值;SpringBoot在底層都給我們自動配置好
在這里插入圖片描述
application.properties配置示例:
server.port=8080
application.yml配置示例:
server: port: 8080
application.properties和application.yml同時配置,application.properties的優(yōu)先級比較高跳仿。
2.YAML的語法:
1. <font color="red">k:(空格)v:表示一對鍵值對(空格必須有)诡渴;</font>
以空格的縮進來控制層級關系;只要是左對齊一列數(shù)據(jù)菲语,都是同一個層級的
```yml
server:
port: 8081
path: /hello
```
屬性和值對大小寫敏感妄辩;
2. <font color="red">值的寫法:</font>
1. <font >字符串:</font>
字符串默認不用加上雙引號或者單引號。如果一定要加上山上,含義存在區(qū)別眼耀;
雙引號:不會轉義字符串里面的特殊字符;特殊字符會作為本身想表示的意思
單引號:會轉義特殊字符佩憾,特殊字符最終只是一個普通的字符串數(shù)據(jù)
```
name:"zhangsan \n lisi" :輸出:zhangsan 換行 lisi
name:'zhangsan \n lisi' :輸出:zhangsan \n lisi
```
2. <font >對象哮伟、Map(屬性和值):</font>
k:v:
對象還是k:v方式
```yml
friends:
lastName: zhangsan
age: 20
```
行內寫法:
```yml
fiends: {lastName: zhangsan,age: 18}
```
3.數(shù)組(List,Set):
用-值表示數(shù)組中的一個元素
```yml
pets:
-dog
-cat
-pg
```
行內寫法:
```yml
pets: {dog,cat,pig}
```
- <font size="5">配置文件注入:</font>
兩種形式的配置文件:
```yml
person:
lastName: 張三
age: 18
boss: false
birth: 2019/12/12
maps:
k1: v1
k2: v2
lists:
-lisi
-alibaba
dog:
name: 小狗
age: 12
```
```property
person.last-name=張三
person.age=20
person.birth=2018/05/05
person.maps.q1=g1
person.maps.q2=o2
person.boss=true
person.dog.name=王五
person.dog.age=89
person.lists=a,b,c
```
javabean:
```java
/**
* 將配置文件中配置的每一個屬性的值,映射到這個組件中
* @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關的配置進行綁定
* prefix屬性就是與配置文件中哪一個屬性進行匹配
*/
@Component
@ConfigurationProperties(prefix = "person")
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;
```
導入配置文件處理器:
```xml
<!--配置文件處理器妄帘,配置文件進行綁定就會有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
```
-
@Value獲取值和@Con?gurationProperties獲取值比較
在這里插入圖片描述 - @PropertySource和@ImportResources****@PropertySource:用來加載指定的配置文件
```java
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
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;
```
![在這里插入圖片描述](https://upload-images.jianshu.io/upload_images/18288748-fba9cd2be3f26b4c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
@ImportResource:導入Spring的配置文件楞黄,讓配置文件里面的內容生效。
Spring Boot里面沒有Spring的配置文件抡驼,我們自己編寫的配置文件鬼廓,無法自動識別。
想讓Spring的配置文件生效婶恼,加載進來;@ImportResource標注在一個配置類上
```java
@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class SpringBoot02ConfigApplication {
```
<font color="red">**SpringBoot推薦給容器中添加組件的方式:推薦使用全注解的方式**</font>
1. 配置類=======Spring配置文件
2. 使用@Bean給容器中添加組件
```java
package com.crud.springboot.config;
import com.crud.springboot.bean.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Configuration指明當前類是一個配置類:用來替代Spring配置文件
* 在配置文件中<bean></bean>來添加組件
*
*/
@Configuration
public class MyAppConfig {
//將方法的返回值添加到容器中:容器中默認的id就是方法名
@Bean
public HelloService helloService(){
System.out.println("配置bean");
return new HelloService();
}
}
```
- Profile
##### 1柏副、多Profile文件
我們在主配置文件編寫的時候勾邦,文件名可以是:application-{profile}.properties/yml
![在這里插入圖片描述](https://upload-images.jianshu.io/upload_images/18288748-580b4c1159936a35.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##### 2、yml支持多文檔塊方式
![在這里插入圖片描述](https://upload-images.jianshu.io/upload_images/18288748-7fe0b4cbc599b1b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##### 3割择、激活指定profile
1眷篇、在配置文件中指定要激活哪個配置:spring.profiles.active=dev
2、命令行
??????3荔泳、虛擬機
-
配置文件的加載位置
spring boot 啟動會掃描以下位置的application.properties或者 application.yml文件作為Spring boot的默認配置文件
– file:./config/
– file:./
– classpath:/config/
– classpath:/
– <font color="red">以上是按照優(yōu)先級從高到低的順序蕉饼,所有位置的文件都會被加載,高優(yōu)先 級配置內容會覆蓋低優(yōu)先級配置內容玛歌。</font>
– 我們也可以通過配置spring.config.location來改變默認配置(項目打包后)
– SpringBoot會從這四個位置全部加載主配置文件:互不配置昧港;
在這里插入圖片描述 -
外部配置加載順序
SpringBoot也可以從以下位置加載配置;<font color="red">按照優(yōu)先級從高到低</font>- 命令行參數(shù)
- 來自java:comp/env的JNDI屬性
- Java系統(tǒng)屬性(System.getProperties())
- 操作系統(tǒng)環(huán)境變量
- RandomValuePropertySource配置的random.*屬性值
- jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
- jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
- jar包外部的application.properties或application.yml(不帶spring.profile)配置文件
- jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
- @Configuration注解類上的@PropertySource
- 通過SpringApplication.setDefaultProperties指定的默認屬性
-
自動配置原理
配置文件能配置的屬性參照:https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/htmlsingle/#common-application-properties自動配置原理
1).SpringBoot啟動的時候加載主配置類支子,開啟了自動配置@EnableAutoConfiguration
在這里插入圖片描述
2). @EnableAutoConfiguration的作用
????-利用AutoConfigurationImportSelector給容器中導入一些組件
????-可以查看selectImports()方法的內容创肥;
????-List con?gurations = getCandidateCon?gurations(annotationMetadata, attributes);獲取候選的配置
在這里插入圖片描述????-將 類路徑下 META-INF/spring.factories 里面配置的所有EnableAutoCon?guration的值加入到了容器中;
在這里插入圖片描述
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
每一個這樣的 xxxAutoCon?guration類都是容器中的一個組件,都加入到容器中叹侄;用他們來做自動配置巩搏;
3)、每一個自動配置類進行自動配置功能趾代;
4)贯底、以HttpEncodingAutoCon?guration(Http編碼自動配置)為例解釋自動配置原理;
根據(jù)當前不同的條件判斷撒强,決定這個配置類是否生效禽捆?
一但這個配置類生效;這個配置類就會給容器中添加各種組件尿褪;這些組件的屬性是從對應的properties類中獲取 的睦擂,這些類里面的每一個屬性又是和配置文件綁定的;
5)杖玲、所有在配置文件中能配置的屬性都是在xxxxProperties類中封裝者‘顿仇;配置文件能配置什么就可以參照某個功 能對應的這個屬性類
精髓:
1)、SpringBoot啟動會加載大量的自動配置類
2)摆马、我們看我們需要的功能有沒有SpringBoot默認寫好的自動配置類臼闻;
3)近速、我們再來看這個自動配置類中到底配置了哪些組件所宰;(只要我們要用的組件有,我們就不需要再來配置了)
4)疹吃、給容器中自動配置類添加組件的時候蕉毯,會從properties類中獲取某些屬性乓搬。我們就可以在配置文件中指定這 些屬性的值;
xxxxAutoCon?gurartion:自動配置類代虾;
給容器中添加組件
xxxxProperties:封裝配置文件中相關屬性进肯;
5)、自動配置類必須在一定的條件下才能生效棉磨;
我們怎么知道哪些自動配置類生效江掩;
我們可以通過啟用 debug=true屬性(在配置文件中設置);來讓控制臺打印自動配置報告乘瓤,這樣我們就可以很方便的知道哪些自動配置 類生效环形;