springboot配置文件详解

摘要:
Https:都是相同级别的服务器:端口:年龄:18}12345678数组(列表:狗:12}列表:映射;列表;1234567891011121314151617181920212pom.xml文件Add Profile Processor<

https://blog.csdn.net/myvanguard/article/details/84844583

简介

springboot的默认配置文件

application.properties
application.yml
yaml是标记语言,是以数据为中心的的配置文件


server:
port:8081

1
2
3
4
2.yaml语法
1.基本语法
k:(空格v:表示一对键值对(空格必须有)
以空格的缩进来控制层级关系:只要左对齐的一列数据,都是同一个层级


server:
port:8080
path:/path

1
2
3
4
5
2.值的写法
字面量:普通的值(数字,字符串,布尔值)
K:V:字面直接来写
字符串不需要使用双引号或者单引号
“”:会转义特殊字符 “ ” 输入 换行
‘’:不会转义特殊字符 ‘ ’ 输出还是

对象,Map 键值对
k:V:在下一行写对象的属性关系和值的关系;注意缩进


friend:
name:zhangsan
age:12

行内写法

friend: {name:zhangsan,age:18}
1
2
3
4
5
6
7
8
数组(list,set)
使用-值 表示数组中的一个元素


pets:
- cat
- dog
- pig

行内写法
pets: [cat,dog,pig]
1
2
3
4
5
6
7
8
3.配置文件注入

person:
lastName: zhangsan
age: 18
boss: false
birth: 2017/01/01
maps: {k1:v1,k2:12}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14

/**
* 将配置文件中的配置的每一个属性的值 映射到这个组件在
* @ConfigurationProperties 告诉springboot将本类中的所有的属性和配置文件中的有关的配置进行绑定
* prefix = "person" 配置文件中的哪一个下面的所有属性进行映射
*
* 只有这个组件是容器中的组件 才能提供@ConfigurationProperties 的值
*/
@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;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pom.xml文件添加配置文件处理器


<!--导入配置文件处理器 配置文件绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

1
2
3
4
5
6
7
8
1.peroperties文件的写法


server.port=8081
#idea 的properties文件 默认使用utf-8
#peroperties文件使用的ascii编码
#配置person的值
person.last-name=张三
person.age=18
person.birth=2017/01/01
person.boss=false
person.maps.k1=v1
person.maps.k2=12
person.lists=a,b,c
person.dog.name=dog
person.dog.age=2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
idea 针对properties文件需要作出一点配置

2.@Value()注解和@ConfigurationProperties注解的区别

@ConfigurationProperties 批量注入,支持松散语法,不知springEL表达式,支持数据校验,支持复杂数据封装

@Value 支持springEL表达式

如果只是获取配置文件的一项值 使用@Value


@Value("${person.last-name}")
private String name;

@RequestMapping("/sayHello")
public String sayHello(){
return "say"+name;
}


1
2
3
4
5
6
7
8
9
10
如果是javabean 使用@ConfigurationProperties

3.配置文件数据校验


@Component
@ConfigurationProperties(prefix = "person")
//数据校验
@Validated
public class Person {

/**
* 使用@Value注解 从字面量/${key}#{SpEL}等语法中获取
*/
//@Value("${person.last-name}")
//lastName必须是邮件地址
@Email
private String lastName;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
4.@PropertySource 和@ImportResource
@PropertySource 导入指定的配置文件

//value = {"a","b"}
@PropertySource(value = {"classpath:person.properties"})

1
2
3
@ImportResource 导入spring的配置文件 让配置文件的内容生效

@ImportResource 标注在一个配置类


@ImportResource(value = {"classpath:beans.xml"})

1
2
3
springboot里面推荐给容器中添加组件的方式 使用配置类 使用全注解的方式

1、使用@Configuration来声明一个注解类

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


/**
* @Configuration 指明当前类是一个配置类 代替原来的xml配置bean的方式
*/
@Configuration
public class MyAppConfig {

//将方法的返回值添加到容器中
@Bean
public HelloService helloService(){
return new HelloService();
}
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
4.配置文件占位符

1.随机数

${random.value} ${random.int} ${random.long}
${random.int(10)} ${random.int[1024,666]}


1
2
3
4
2.占位符 获取配置的值 如果没有 则取默认值 :后

person.dog.name=${person.hello:hello}_dog

1
2
5.profile

是spring针对不同环境的不同配置

1.多profile文件
appliction-{profile}.properties/yml
比如
application-dev.properties
application-test.properties

2.yml支持文档块方式


server:
port: 8081
spring:
profiles:
active: prod
---


server:
port: 8080
spring:
profiles: prod
---
server:
port: 8083
spring:
profiles: dev

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
3.激活指定的profile

方式1 在指定配置文件中指定profile spring.profiles.active==dev

方式2 java -jar demo.jar --spring.profiles.active=dev

方式3 虚拟机参数 -Dspring.profiles.active=dev

6.加载配置文件位置优先级

4个application.properties的优先级 由高到低 依次加载 依次覆盖

1>2>3>4

可以通过spring.config.location=C:/application.properties 来修改默认配置,使用指定配置文件

7外部配置文件的加载顺序

springboot可以按照以下的文件位置加载配置 由高到低 互补配置

命令参数 java -jar demo.jar --server.port=8087
java系统参数
系统环境变量
优先加载带profile的配置文件 都是有jar包外往jar包内加载配置文件

8.springboot自动配置原理

1.配置文件的属性 --参照官方文档

自动配置原理
1.springboot启动的时候加载主配置类,而且开启了自动配置功能@EnableAutoConfiguration
2.@EnableAutoConfiguration作用

利用EnableAutoConfigurationImportSelector给容器导入一些组件
可以添加组件的方法selectImports()方法的内容
List configurations = geCandidateConfigurations(AnotationMetadata,attributes);//获取候选的配置
扫描jar包,把扫描到的内容META-INF/spring.properties包装为properties对象
从properties对象获取类名对应的值 然后添加到容器中
3.每一个自动配置类XXXAutoConfiguration进行自动配置功能

4.以HttpEncodingAutoConfiguration解释自动配置原理


@Configuration //这是一个配置类 即为配置文件 可添加组件@EnableConfigurationProperties({HttpProperties.class})//启用指定类的ConfigurationProperties 将配置文件中对应的值和HttpEncodingProperties绑定起来
把HttpEncodingProperties加入到ioc容器中

@ConditionalOnWebApplication(
type = Type.SERVLET
)//spring底层@Conditional注解 根据不同的条件 如果满足指定的条件 整个配置类里面的配置就会生效 判断当前应用是web应用 如果是 当前配置类生效
@ConditionalOnClass({CharacterEncodingFilter.class})//判断当前有没有这个类CharacterEncodingFilter springMVC的乱码过滤器
@ConditionalOnProperty(
prefix = "spring.http.encoding",
value = {"enabled"},
matchIfMissing = true
)//判断配置文件中是否存在某个配置 如果不存在 也是成立的
//即使不配置 也是默认生效的
public class HttpEncodingAutoConfiguration {

//和springboot的配置文件映射了
private final Encoding properties;

//只有一个有参数构造器的情况下 从容器中拿
public HttpEncodingAutoConfiguration(HttpProperties properties) {
this.properties = properties.getEncoding();
}

@Bean//给容器中添加一个组件 某些值需要从properties中获取
@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;
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
根据当前不同的条件判断决定这个配置类是否生效?

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

5 所有在配置文件中能够配置的属性都是在xxxproperties文件中封装了


@ConfigurationProperties(
prefix = "spring.http"
)//从配置文件中获取指定的值和bean的属性进行绑定
public class HttpProperties {


1
2
3
4
5
6
7
springboot精髓
1.springboot启动会加载大量的自动配置类
2.我们需要的功能有没有springboot默认写好的自动配置类
3.我们再看自动配置类配置了那些组件 只要我们要用的组件有 就不需要配置了
4.给容器自动配置组件的时候 会从properties文件类获取某些属性。我们可以在配置文件中指定这些属性的值

9.@Conditional派生注解

作用是:必须是@Conditional指定的条件生效 才给容器中添加组件 配置的所有内容才会生效

自动配置类 只有在一定条件上才会生效

我们如何判断哪些自动配置类生效?

在properties/yml中添加
debug=true#开启springboot的debug

我们可以通过启用debug=true 来让控制台打印自动配置报告 知道哪些生效了
---------------------
作者:学习急先锋
来源:CSDN
原文:https://blog.csdn.net/myvanguard/article/details/84844583
版权声明:本文为博主原创文章,转载请附上博文链接!

免责声明:文章转载自《springboot配置文件详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ArcGIS Pro体验04——菜单栏HGVS,全称是Human Genome Variation Society,即人类基因组变异协会的缩写。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

阿里云oss对象存储在vue中的使用

阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务可用性(或业务连续性)不低于99.995%。 OSS具有与平台无关的RESTful API接口,可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 项目中如果...

数据可视化之powerBI技巧(十二)学会这几个度量值,轻松获取前N名

数据中的明细项一般都有很多,可是我们关注的往往只是前几名,所以在报表中只展示关注的部分,就十分常用。 有了上篇(这几个示例,帮你深入理解RANKX排名)关于排名的铺垫,仅显示前N名就简单多了。 依然以上篇文章数据中的数据为例,按销售额的高低来显示前几名的产品,使用最常用的排名方式, 排名 = RANKX(ALL('产品'),[销售额]) 有了这个排名,如果...

Android手机里的垃圾文件和文件夹清理

SD卡中各个文件夹功能的最详尽分析SD卡用久了会有好多文件夹出现,大家看看都是干什么用~1、.android_secure  是官方app2sd的产物,删了之后装到sd卡中的软件就无法使用了。2、.Bluetooth  顾名思义,用蓝牙之后就会有这个。3、.mobo  顾名思义,Moboplayer的缓存文件。4、.QQ   顾名思义,QQ的缓存文件。5、...

清除页面广告?身为前端,自己做一款简易的chrome扩展吧

大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球。 当然有现成的扩展程序或者插件(两者概念稍有不同)可以清除页面广告,但是既然身为一名程序猿,尤其是FEDer,为什么不尝试一下自己写一个清除广告的扩展程序呢。其实,编写一个浏览器扩展程序...

git开发常用命令

1.基本命令git branch 查看本地分支git branch -r 查看远程分支git checkout xxx 切换分支git pull origin master //从远程同步到本地,master或分支名git pull origin xxxgit checkout -b xxx 新建xxx的分支git checkout -b 本地分支名 远程...

Linux 系统的日志目录

连接时间的日志 连接时间日志一般由/var/log/wtmp和/var/run/utmp这两个文件记录,通过who查看 who /var/log/wtmp 【连接时间日志】 who /var/log/utmp 【连接时间日志】 ac -p //查看每个用户的连接时间 ac -a //查看所有用户的连...