SpringBoot-2 配置与自动配置

配置文件

1、spring boot 配置文件

spring boot使用一个全局配置文件,名称是固定的:

​ application.properties

​ application.yml

作用是修改 spring boot 默认配置值

2、YAML介绍

​ 以前的配置语言大都是XXX.XML,使用的是XML语言

​ YAML:以数据为中心

#配置tomcat默认端口号是8081——prperties文件写法
server.port=8081
#配置tomcat默认端口号是8081——YAMl文件写法
server:
  port: 8081

|YAML 语法

k:空格 v 表示一对键值对,注意冒号必须有空格。

以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是一个层级的。且区分大小写

||值 的写法

字面量:String,Boolen,int等

  直接写值,字符串无需添加双引号或单引号;

​ “”:双引号;会转义字符串里的特殊字符

​ ‘’:单引号;不会转义字符串里的特殊字符,单纯的字符串

对象:Bean,Map等

​ 在下一行补充对象的熟悉和值的关系,注意缩进例:

student:
	sname: lijie
	age: 20

​ 行内写法:student: {sname: zhangsan,age: 20}

数组:List

用- 表示数组中的一个元素

class:
	- math
	- english
	- chinese	

行内写法:class: [math,english,chinese]

3、配置文件使用案例

在spring boot中,使用 @configurationProperties注解,表明该类中的元素与配置文件绑定。使用该注解时,需要引入

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

​ @configurationProperties注解的属性:prefix 指明配置文件中的前缀,进行一一映射。注意是在要配置的bean上添加该注解

| YAML使用案例

server:
  port: 8081
student:
  sno: 123
  sname: lijie
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    private String sno;
    private String sname;

    public String getSno() {
        return sno;
    }
    public void setSno(String sno) {
        this.sno = sno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    @Override
    public String toString() {
        return "student{" +
                "sno='" + sno + '\'' +
                ", sname='" + sname + '\'' +
                '}';
    }
}

|| properties使用案例

#配置tomcat默认端口号是8081——prperties文件写法
server.port=8081
student.sname=zilu
student.sno=321
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    private String sno;
    private String sname;

    public String getSno() {
        return sno;
    }
    public void setSno(String sno) {
        this.sno = sno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    @Override
    public String toString() {
        return "student{" +
                "sno='" + sno + '\'' +
                ", sname='" + sname + '\'' +
                '}';
    }
}

||| @Value 和@properties区别

@Value@Configurationproperties
功能一个个注入数据配置文件批量注入
松散绑定不支持支持
SpEL支持不支持
JSR303不支持支持

当注入的数据是复杂类型是,使用@Configurationproperties,其他则可使用@Value注解。

IV 指定读取properties文件

​ @configurationproperties是读取的全局配置文件,这一般是spring boot 的配置文件,若将与spring boot 无关的配置,写在其他配置文件中,@Configurationproperties则无法读取。

解决:在==@configurationproperties注解之上添加@propertySource==注解

@Component
@PropertySource(value = {"classpath:student.properties"})
@ConfigurationProperties(prefix = "student")
public class Student {
    private String sno;
    private String sname;

    public String getSno() {
        return sno;
    }
    public void setSno(String sno) {
        this.sno = sno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    @Override
    public String toString() {
        return "student{" +
                "sno='" + sno + '\'' +
                ", sname='" + sname + '\'' +
                '}';
    }
}

V 导入spring的配置文件

​ spring boot默认不会导入spring的配置文件。在spring boot 主启动类上添加@ImportResource注解。

@importResource:导入spring配置文件

属性:location spring配置文件位置,

使用:

@ImportResource(locations = {"classpath:springConfig.xml"})
@SpringBootApplication
public class SpringbootHelloworldQuickApplication {
 public static void main(String[] args) {
     SpringApplication.run(SpringbootHelloworldQuickApplication.class, args);
 }

}

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

1、使用添加注解的配置类 代替 xml格式的配置文件

@configuration、@Bean等

4、配置文件中的占位符

1、随机数

${random.value} 、${random.int}、 ${random.long} 、${random.uuid} 等

2、占位符,获取之前配置的值。可指定默认值

student.name=${person.hello:lijie} :设置student 的name值为person的hello值,若没有则设为lijie

5、Profile

spring boot项目需要运行在不同的环境时,有不同的配置文件,有选择性的配置相关配置。

I 对于properties配置文件

命名:application-名字.properties

使用时在application主配置中添加:spring.profiles.active=名字

运行时spring boot 就加载该application-名字.properties

I 对于YAML配置文件

一个YAML文件中,使用 — 文档块划分不同的配置

使用文档块配置:在第一文档块中添加:

spring:
	profiles: 
		active: 名字
spring:
	profiles: 
		active: dev
---
server:
  port: 8888
spring:
  profiles: dev
student:
  sno: 123
  sname: lijie
---
server:
  port: 8811
spring:
  profiles: test
student:
  sno: 321
  sname: zilu
---

III 激活profiles配置

  • 方法一:在spring boot 主配置文件中设置spring.profiles.active=名字
  • 方法二:命令行:–spring.profiles.active=名字;全称:在控制台运行 java-jar jar路径和文件名.jar–spring.profiles.active=名字
  • 方法三:虚拟机参数:-Dspring.profiles.active=名字

6、配置文件加载优先级

spring boot 会扫描application.properties 或application.yml文件作为spring boot的默认配置文件

但文件在不同的位置有不同的优先级:

​ 根目录…/config/ >

  根目录/   > 

​ classpath:/config/ >

   classpath:/

高优先级与低优先级都会加载,但同一配置高优先级会覆盖低优先级,不同的配置则会互补。

​ 项目打包后,我们通过使用命令行参数形式启动工程,此时使用: spring.config.location =“指定配置文件路径”

7、外部配置文件的加载

1、运行时,控制台参数

由打包的jar外部向内部进行加载

2、 加载jar外部的application.properties/yml文件

3、 加载jar包内部的application.properties/yml文件

8、spring boot自动配置原理

application.properties/yml配置文件能够配置的内容有:https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle/#common-application-properties

spring boot 配置原理:

spring boot  启动的时候加载主配置类,开启自动配置功能   ==@EnableAutoConfiguration==

 ==@EnableAutoConfiguration==:

​			利用@EnableAutoConfigurationimportSelector给容器导入组件

​			selectImports()方法返回String[]类型的插件名称

最终:将类路径下:==META-INF/spring.factories里面配置的所有EnableAutoConfiguration加载到spring boot容器中。==
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.elasticsearch.ReactiveElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveRestClientAutoConfiguration,\
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.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.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.reactive.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.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

这些配置类进行配置。

以org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration为例。

@Configuration(
proxyBeanMethods = false
)
@EnableConfigurationProperties({HttpProperties.class})//自动配置HttpProperties类中的属性
@ConditionalOnWebApplication(
type = Type.SERVLET
)//判断当前是不是web应用
@ConditionalOnClass({CharacterEncodingFilter.class})//判断当前应用有没有这个类
@ConditionalOnProperty(
prefix = "spring.http.encoding",
value = {"enabled"},
matchIfMissing = true
)//判断配置文件中是否存在spring.http.encoding,若不存在也成立。相当于配置文件中不存在spring.http.encoding也成效。
public class HttpEncodingAutoConfiguration {

 @Bean//在上述注解成立后,给容器中添加一个组件
 @ConditionalOnMissingBean
 public CharacterEncodingFilter characterEncodingFilter() {
     CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
     filter.setEncoding(this.properties.getCharset().name());
     filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.REQUEST));
     filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.RESPONSE));
     return filter;
 }

在==@EnableConfigurationProperties({HttpProperties.class})==中,要配置的属性封装在HttpProperties类中,自定义配置类时,即可参照类里的属性进行配置。

总结:spring boot启动会加载许多自动配置类,我们看项目中有没有默认的配置类,在该类中查看详细的元素属性。若无,则在properties/yml文件中设置配置。

查看有哪些自动配置类生效方法:配置文件中添加设置

debug=true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值