SpringBoot_配置

配置文件

SpringBoot使用一个全局的配置文件,全局配置文件的名称是固定的:application.properties或者application.yml

配置文件的作用: 修改 SpringBoot 自动配置的默认值;


YAML

ymlYAML 语言的文件,以数据为中心,比 json 和xml 等更适合做配置文件;

配置格式:

<!--xml格式-->
<server>
	<port>8081</port>
</server>

<!--properties格式-->
server.port=8081

<!--yml格式-->
server:
	port: 8081

基本语法:

k:(空格)v:表示一对键值对(空格必须有
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格
缩进空格数目不重要,只要相同层级的元素左侧对齐即可
大小写敏感

示例:

server:
	port: 8081
	path: /hello

值的写法:

1,字面量: 普通值,包括 数字、字符串、布尔、日期

说明示例
k: v 字面格式直接来写name: youyou
字符串默认不用加上单引号或者双引号
" " :双引号;不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思name: “youyou \n meimei” 等同于 youyou 换行 meimei
’ ’ :单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据name: ‘youyou \n meimei’ 等同于 youyou \n meimei

2,对象(Map):

k: v:在下一行来写对象的属性和值的关系(注意缩进);

基本写法示例:

friends:
   lastName: meimei
   age: 20

行内写法示例:

friends: {lastName: meimei,age: 20}

3,数组: 包括 List、Set

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

基本写法示例:

pets:
  ‐ cat
  ‐ dog
  ‐ pig

行内写法示例:

pets: [cat,dog,pig]

复合结构示例:
<!--javaBean对象-->

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 Cat cat;

	...
}

public class Cat {

    private String name;
    private Integer age;

	...
}

<!--application.yml-->

person:
  lastname: youyou
  age: 18
  boss: false
  birth: 2020/02/25
  maps:
    k1: v1
    k2: v2
  lists:
      - liangliang
      - meimei
      - xiaoxiao
  cat:
    name: 七月
    age: 01
    

配置文件值注入:

@ConfigurationProperties 进行值注入

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中 person 下面的所有属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能;
 *  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
 *
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
   ...

Person.java 文件可能有以下提示:
在这里插入图片描述

导入配置文件处理器:

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

@Value 和 @ConfigurationProperties 区别

@Value@ConfigurationProperties
功能一个个指定批量注入配置文件中的属性
松散绑定(松散语法)不支持支持
SpEL支持不支持
JSR303数据校验不支持支持
复杂类型封装不支持支持

注意点:

只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用 @Value ;
专门编写了一个 javaBean 来和配置文件进行映射,我们就直接使用 @ConfigurationProperties ;

@PropertySource & @ImportResource

@PropertySource: 加载指定的配置文件;


<!--加载resources目录下的person.properties配置文件-->
@PropertySource(value = {"classpath:person.properties"})

@ImportResource: 导入 Spring 的配置文件,让配置文件里面的内容生效;

Spring Boot 里面没有 Spring 的配置文件,我们自己编写的配置文件,也不能自动识别;使用@ImportResource 让 Spring 的配置文件生效,加载进来;


<!--resources目录下的beans.xml为Spring的配置文件-->
@ImportResource(locations = {"classpath:beans.xml"})

配置文件占位符

Profile

多Profile文件

1,在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml;

2,默认使用application.properties的配置;

3,激活对应的profile:在默认配置文件中指定 spring.profiles.active= {profile}(对应的配置文件名)


yml支持多文档块方式:


server:
  port: 8081
spring:
  profiles:
    active: prod #指定激活哪个环境的配置信息
‐‐‐
server:
  port: 8083
spring:
  profiles: dev #指定属于哪个环境
‐‐‐
server:
  port: 8084
spring:
  profiles: prod #指定属于哪个环境
  

配置文件加载位置

扫描路径1, –file:./config/ ;2, –file:./ ;3, –classpath:/config/ ; 4,–classpath:/ ;
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
说明从这四个位置全部加载主配置文件,互补配置 ;可以通过 spring.config.location 改变默认的配置文件位置;

外部配置加载顺序

SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

优先级加载位置
1命令行参数
2来自 java:comp/env 的 JNDI 属性
3Java系统属性(System.getProperties())
4操作系统环境变量
5RandomValuePropertySource 配置的 random.* 属性值
6jar包外部application-{profile}.properties 或 application.yml (带spring.profile)配置文件
7jar包内部application-{profile}.properties 或 application.yml (带spring.profile)配置文件
8jar包外部application.properties 或 application.yml (不带spring.profile)配置文件
9jar包内部application.properties 或 application.yml (不带spring.profile)配置文件
10@Configuration 注解类上的 @PropertySource
11通过 SpringApplication.setDefaultProperties 指定的默认属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值