(超详解)SpringBoot初级部分-配置-03

Posted LL.LEBRON

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(超详解)SpringBoot初级部分-配置-03相关的知识,希望对你有一定的参考价值。

SpringBoot-配置-03

该文章参考:黑马SpringBoot

1.配置文件分类

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用 application.properties或者application.yml(application.yaml)进行配置。

  • properties:

    server.port=8080
    
  • yaml:

    server:
    port: 8080
    

总结:

  • SpringBoot提供了2种配置文件类型:properteisyml/yaml
  • 默认配置文件名称:application
  • 在同一级目录下优先级为:properties > yml > yaml

2.yaml

2.1yaml定义

yaml:YAML全称是 YAML Ain’t Markup Language 。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, php等。YML文件是以数据为核心的,比传统的xml方式更加简洁。 YAML文件的扩展名可以使用.yml或者.yaml

对比:

  • properties:

    server.port=8080
    server.address=127.0.0.1
    
  • xml:

    <server>
        <port>8080</port>
        <address>127.0.0.1</address>
    </server>
    
  • yaml:

    server: 
    port: 8080
    address: 127.0.0.1
    

可以看出:对比其他两种方式,yaml更简洁,以数据为核心

2.2yaml基本语法

  • 大小写敏感
  • 数据值前边必须有空格,作为分隔符
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混乱)。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略。

2.3yaml数据格式

  • 对象(map):键值对的集合

    person:
    name: zhangsan
    # 行内写法
    person: {name: zhangsan}
    
  • 数组:一组按次序排列的值

    address:
    - beijing
    - shanghai
    # 行内写法
    address: [beijing,shanghai]
    
  • 纯量:单个的,不可再分的值

    msg1: 'hello \\n world' # 单引忽略转义字符
    msg2: "hello \\n world" # 双引识别转义字符
    

2.4yaml参数引用

name: lisi
person:
name: ${name} # 引用上边定义的name值

3.读取配置文件内容

先预先准备好测试的ymal文件:

name: xpp

person:
  name: ${name}
  age: 23
  address:
    - benjing
    - shanghai

address:
  - benjing
  - shanghai

msg1: 'hello \\n springboot'
msg2: "hello \\n springboot"

3.1@Value

@Value("${name}")
private String name;
@Value("${person.name}")
private String name1;
@Value(("${address[0]}"))
private String address1;
@Value("${msg1}")
private String msg1;
@Value("${msg2}")
private String msg2;

@RequestMapping("/hello2")
public String hello2(){
    System.out.println(name);
    System.out.println(name1);
    System.out.println(address1);
    System.out.println(msg1);
    System.out.println(msg2);
    return "Hello SpringBoot !";
}
输出结果:
xpp
xpp
benjing
hello \\n springboot
hello 
springboot

3.2Environment

@Autowired
private Environment env;

@RequestMapping("/hello2")
public String hello2(){
    System.out.println(env.getProperty("name"));
    System.out.println(env.getProperty("person.age"));
    System.out.println(env.getProperty("address[0]"));

    return "Hello SpringBoot !";
}
输出:
xpp
23
benjing

3.3@ConfigurationProperties

准备一个Person类:

@Component//表示这个类被spring识别了
@ConfigurationProperties(prefix = "person")//绑定前缀
//下面四个注解为LomBok提供的,简化开发,自动帮我们写好get,set,有参,无参和toString方法
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Person {
    private String name;
    private Integer age;
    private String[] address;
}

测试:

@Autowired
private Person person;

@RequestMapping("/hello2")
public String hello2(){
    System.out.println(person);
    return "Hello SpringBoot !";
}
输出结果:
Person(name=xpp, age=23, address=[benjing, shanghai])

4.profile

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

4.1profile配置方式

(1)多profile文件方式

提供多个配置文件,每一个代表一种环境:

  • application-dev.properties/yml 开发环境
  • application-test.properties/yml 测试环境
  • application-pro.properties/yml 生产环境

注意!:格式必须为application-xxx.properties/yml

在主配置文件application.properties选择用哪种环境:

格式spring.profiles.active=xxx

spring.profiles.active=dev

(2)yaml多文档方式

---用来划分yaml文件区域

---

server:
  port: 8081
spring:
  config:
    activate:
      on-profile: dev
---
server:
  port: 8082
spring:
  config:
    activate:
      on-profile: test
---
server:
  port: 8083
spring:
  config:
    activate:
      on-profile: pro
---
spring:
  profiles:
    active: test

4.2profile激活方式

(1)配置文件

即上面所讲的:在配置文件中配置:spring.profiles.active=dev

(2)虚拟机

VM options 指定:-Dspring.profiles.active=xxx

(3)命令行参数

java –jar xxx.jar --spring.profiles.active=xxx

①直接在Program arguments配置

②打包方式配置

进入target文件夹(快捷键Ctrl+Alt+F12)

在当前目录打开cmd

输入java –jar xxx.jar启动SpringBoot项目

输入java –jar xxx.jar --spring.profiles.active=xxx即可更改环境

5.内置配置加载顺序

Springboot程序启动时,会从以下位置加载配置文件:

  1. file:./config/:当前项目下的/config目录下
  2. file:./ :当前项目的根目录
  3. classpath:/config/:classpath的/config目录
  4. classpath:/ :classpath的根目录(之前我们用的就是这种)

加载顺序为上文的排列顺序,高优先级配置的属性会生效

6.外部配置加载顺序

通过官网查看外部属性加载顺序:

最后喜欢的小伙伴别忘了一键三连哦🎈🎈🎈

以上是关于(超详解)SpringBoot初级部分-配置-03的主要内容,如果未能解决你的问题,请参考以下文章

(超详解)SpringBoot初级部分-概述-01

(超详解)SpringBoot初级部分-整合其他框架-04

(超详解)SpringBoot初级部分-快速入门-02

(超详解)SpringBoot高级部分-自动配置+监听机制+监控+项目部署

logback-spring.xml配置文件标签(超详解)

Mybatis Plus超详解-p1(常用操作&基础配置)