配置文件
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