当前位置:   article > 正文

SpringBoot之配置文件_springboot配置文件

springboot配置文件

1、配置文件分类

SpringBoot提供了3种配置文件的格式

  • application.properties(传统格式/默认格式)
server.port=81
  • 1
  • application.yml(主流格式)
server:
  port: 82
  • 1
  • 2
  • application.yaml
server:
  port: 83
  • 1
  • 2

yml格式和yaml格式除了文件名后缀不一样,格式完全一样

临时属性设置

  • 使用jar命令启动SpringBoot工程时可以使用临时属性替换配置文件中的属性
  • 在命令输入完毕后,空一格,然后输入两个-号,当属性存在多级名称时,中间使用分隔,和properties文件中的属性格式完全相同
  • 临时属性添加方式:java -jar 工程名.jar --属性名=值
java –jar springboot.jar --server.port=80 --logging.level.root=debug
  • 1
  • 临时属性的加载优先级要高于配置文件的
  • idea中Program arguments(程序参数)VM options (虚拟机参数)就是添加临时属性的

在这里插入图片描述

  • 虚拟机参数一般用来设置系统属性(不常用)
  • 程序参数一般用来设置应用程序选项或参数(常用
  • –server.port 选项应该在 java -jar 命令之后使用,而 -Dserver.port 选项应该在 -jar 命令前使用
# 以应用参数的方式
java -jar my.jar --server.port=7788

# 或以 JDK 参数的方式
java -Dserver.port=7788 -jar my.jar
  • 1
  • 2
  • 3
  • 4
  • 5

2、配置文件优先级

SpringBoot3种配置文件不同版本优先级

  • springboot 2.4.0及以后版本:application.yaml ➡️ application.yml ➡️ application.properties
  • springboot 2.4.0以前版本:application.properties ➡️ application.yml ➡️ application.yaml
  • 不同配置文件中相同配置高优先级覆盖低优先级,不同配置文件中不同配置全部保留
  • 旧版application.properties优先级最高,新版优先级最低

配置文件不同位置优先级

  1. classpath:application.yml(resources目录)【最低-程序员】
  2. classpath:config/application.yml(resources目录下的config目录)【项目经理】
  3. file :application.yml(jar包所在目录下config目录)【运维】
  4. file :config/application.yml(jar包所在目录下config目录)【最高-运维经理】

使用场景

  1. 项目类路径配置文件:服务于开发人员本机开发与测试
  2. 项目类路径config目录中配置文件:服务于项目经理整体调控
  3. 工程路径配置文件:服务于运维人员配置涉密线上环境
  4. 工程路径config目录中配置文件:服务于运维经理整体调控

3、自定义配置文件

  • 方式一:使用临时属性设置配置文件名,注意仅仅是名称,不要带扩展名
--spring.config.name=myApplication
  • 1
  • 方式二:使用临时属性设置配置文件路径或类路径,全路径名
--spring.config.location=classpath:/myApplication.yml
  • 1

4、yml格式文件

  1. 大小写敏感
  2. 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  3. 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  4. 如果想要识别转义字符,则需要加双引号
  5. #号 表示注释

常见的数据书写格式:

boolean: TRUE  						 #TRUE,true,True,FALSE,false,False均可
float: 3.14    						 #6.8523015e+5  #支持科学计数法
int: 123       						 #0b1010_0111_0100_1010_1110    #支持二进制、八进制、十六进制
null: ~        						 #使用~表示null
string: HelloWorld      			 #字符串可以直接书写
string2: "Hello World"  			 #可以使用双引号包裹特殊字符
date: 2018-02-17        			 #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00  #时间和日期之间使用T连接,最后使用+代表时区
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

yml格式表示简单数组

#数组格式一
subject:
  - Java
  - 前端
  - 大数据
enterprise:
  name: itcast
    age: 16
    subject:
      - Java
        - 前端
        - 大数据
#数组格式二
likes: [王者荣耀,刺激战场]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

yml格式表示对象数组

#对象数组格式一
users1:							 
  - name: Tom
   	age: 4
  - name: Jerry
    age: 5
#对象数组格式二
users2:							 
  -  
    name: Tom
    age: 4
  -   
    name: Jerry
    age: 5
##对象数组缩略格式			    
users3: [ { name: Tom , age: 4 } , { name: Jerry , age: 5 } ]	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

yaml格式表示Map键值对

#方式一
person2:
  map: 
    k1: v1
    k2: v2
#方式二
person2:
  map: {k1: v1,k2: v2}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5、yml数据读取

读取单一数据

使用@Value可以读取单个数据,属性名引用方式:${一级属性名.二级属性名……}

@RestController
public class ReadConfigFile {

    @Value("${server.port}")
    private String myPort;

    @RequestMapping("/getValue")
    public String getValue(){
        System.out.println(myPort);//8080
        return "success";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

读取对象数据

  1. 使用@ConfigurationProperties注解绑定配置信息到封装类中
  2. 封装类需要定义为Spring管理的bean,否则无法进行属性注入

yml:

person:
  name: zhang3
  age: 30
  pets:
    - type: dog
      age: 1
    - type: cat
      age: 2
  mymap:
    mykey1: value1
    mykey2: value2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

属性注入的实体:

@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private List<Pets> pets;//宠物
    private Map<String,String> mymap;
}

@Data
class Pets {
    private String type;
    private Integer age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

添加此依赖,yml属性可以提示@ConfigurationProperties对应的实体的字段属性

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

代码使用

@RestController
public class ReadConfigFile {
    @Autowired
    private Person person;

    @RequestMapping("/getValue")
    public String getValue(){
        System.out.println(person);
        return "success";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

输出结果:

Person(name=zhang3, age=30, pets=[Pets(type=dog, age=1), Pets(type=cat, age=2)], mymap={mykey1=value1, mykey2=value2})
  • 1

6、多环境开发

6.1、yml单一文件版

springboot 2.4.0以前版本

spring:
  profiles:
    active: dev		#激活dev环境配置
---
spring:
  profiles: pro
server:
  port: 80
---
spring:
  profiles: dev
server:
  port: 81
---
spring:
  profiles: test
server:
  port: 82
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

springboot 2.4.0及以后的版本

  • spring.profiles为过时属性配置,不过也能使用
spring:
  profiles:
    active: dev		#激活dev环境配置
---
spring:
  config:
    activate:
      on-profile: pro
server:
  port: 80
---
spring:
  config:
    activate:
      on-profile: dev
server:
  port: 81
---
spring:
  config:
    activate:
      on-profile: test
server:
  port: 82
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

6.2、yml多文件版

application.yml 主配置文件

spring:
  profiles:
    active: pro		#激活pro环境
#其他公共属性
...
  • 1
  • 2
  • 3
  • 4
  • 5

application-pro.yml 生产环境配置文件

server:
  port: 81
  • 1
  • 2

application-dev.yml 开发环境配置文件

server:
  port: 82
  • 1
  • 2
  1. 文件的命名规则为:application-环境名.yml
  2. 主配置文件中设置公共配置(全局)
  3. 环境分类配置文件中常用于设置冲突属性(局部)
  4. 主配置文件属性和环境分类配置文件属性冲突,后者优先级高

6.3、yml独立配置多文件版

  • 将所有的配置根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
    • application-devDB.yml
    • application-devRedis.yml
    • application-devMVC.yml

SpringBoot2.4.0以前版本

  • 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:
  profiles:
    active: dev
    include: devDB,devRedis,devMVC
  • 1
  • 2
  • 3
  • 4
  • 相当于加载dev配置时,再加载对应的3组配置
  • 当主环境dev与其他环境有相同属性时,主环境属性生效
  • 其他环境中有相同属性时,最后加载的环境属性生效
  • 如下展示加载顺序,最后加载的优先级最高(因为覆盖了相同的属性)

在这里插入图片描述

SpringBoot2.4.0及以后版本

  • 比如我要切换dev环境为pro时,include也要修改。因为include属性只能使用一次
  • SpringBoot从2.4版开始使用group属性替代include属性,降低了配置书写量
spring:
  profiles:
    active: dev
      group:
        "dev": devDB,devRedis,devMVC
        "pro": proDB,proRedis,proMVC
        "test": testDB,testRedis,testMVC
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 环境中有相同属性时,最后加载的环境属性生效
  • 如下展示加载顺序,dev在第一位,相同属性会被覆盖

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/953652
推荐阅读
相关标签
  

闽ICP备14008679号