尚硅谷学习笔记---SpringBoot配置文件

  • SpringBoot默认可以用两个名称作为全局配置文件
    1. application.properties
    2. application.yml

在这里插入图片描述

  • 配置文件的作用:修改SpringBoot的默认值.
  • YAML文件
  • 标记语言:
    • 以前的配置文件:大多使用的是xx.xml文件;
    • 而yml是以数据为中心,更适合作为配置文件
  • yaml:配置例子
server:
  port: 8081
  • xml:配置例子
<server>
	<port>8081</port>
</server>
  • 相比较而言,使用yaml语法编写配置信息,整体显得更加简洁,结构也更为清晰.

yml数据结构和常用写法

  1. 基本语法:
key(空格): value 
表示一堆键值对(空格必须有)
  • 以空格的缩进来控制层级关系;只要是左右对齐的一列数据,都是同一个层级的
```yml
server:
	port: 8080
	path: /hello
  1. 值的写法
  • 字面量: 普通的值(数字,字符串,布尔)
k: v - 字面量直接来写,字符串默认不用加上单引号或双引号
	1. 双引号: 不会被转义字符里面的特殊字符;特殊字符会作为本身表示的意思
	2. 单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据
  • 对象,Map(属性和值)(键值对)
    1. 对象的写法
k: 
	k: v
	k: v
  • 对象还有一种行内写法
k: {k: v,k: v......}
  • 数组(list,Set);
  • 数组使用"-"短横线来表示数组中每一个元素
k:
 - v1
 - v2
 - v3

yaml配置文件值注入

  1. 定义一个javaBean程序类—Person
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private String userName;
    private Integer age;
    private Map<String,Object> maps;
    private List<String> animal;
    private List<String> interests;
    private List<Object> friends;
    private List<Map<String,Object>> childs;
    ......
}
  • @ConfigurationProperties:该注解的作用是告诉SpringBoot本类中的所有属性和配置文件中的相关配置进行绑定
  • prefix = “person”,指定配置文件中的key值.
  • @Component:该注解的作用是将该组件添加到SpringBoot容器中,只有称为SpringBoot组件才能够提供@ConfigurationProperties功能.
  • 如果使用@ConfigurationProperties功能,还可以在导入配置文件处理器,这样在编写代码的时候会有相应的提示
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
  1. 在application.yml配置文件中定义"person"属性
person:
  name: 'xiemaoshu'
  user-name: 'admin'
  age: 23
  maps: {k1: v1,k2: v2,k3: v3}
  animal:
    - 'xiaohei'
    - 'xiaobai'
  interests:
    - 'guitar'
    - 'computer gamer'
    - 'fitness'
  friends:
      -
        - 'lanchaogou is my friend'
        - "list\n"
  childs:
    - name: 'c1'
      age: 1
    - name: 'c2'
      age: 2
    - name: 'c3'
      age: 3
  • 在测试类中获取到配置文件中定义的值
  • 要使用SpringBoot测试类需要添加以下的依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  • 定义测试类,获取配置文件中的值
package mao.shu.app.entity;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class PersonTest {
    @Autowired
    private Person person;

    @Test
    public void getPerson(){
        System.out.println(person);
    }
}
  • 控制台输出内容
Person{name='xiemaoshu', userName='admin', age=23, maps={k1=v1, k2=v2, k3=v3}, animal=[xiaohei, xiaobai], interests=[guitar, computer gamer, fitness], friends=[[lanchaogou is my friend, list
]], childs=[{age=1, name=c1}, {age=2, name=c2}, {age=3, name=c3}]}

properties配置文件

  • IDEA中的properties的默认编码是utf-8,而properties文件需要使用ascil编码,所以使用properties配置文件配置中文值的时候会出现乱码的情况
  • 需要进行以下设置,进入settings,对 File Encoding进行设置,将"运行时将properties文件转换为auscil编码.

在这里插入图片描述

  • 编写application.properties配置文件
person.name=xiemaoshu
person.age=23
person.user-name=admin

person.maps.k1=v1
person.maps.k2=v2
person.maps.ceshi=测试数据
person.maps.dd=测试数据

person.animal=dog,cat,fish
person.friends=lanchaog,friend
person.interests=java,game
  • 测试程序类
package mao.shu.app.entity;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class PersonTest {
    @Autowired
    private Person person;

    @Test
    public void getPerson(){
        System.out.println(person);
    }
}
  • 控制台输出
Person{name='xiemaoshu', userName='admin', age=23, maps={k1=v1, dd=测试数据, ceshi=测试数据, k2=v2}, animal=[dog, cat, fish], interests=[java, game], friends=[lanchaog, friend], childs=null}

@ConfigurationProperties和@Value的区别

@ConfigurationProperties@Value
功能批量注入属性值单个注入属性值
松散绑定支持不支持
SqEl不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持
  • 松散绑定指的是:在绑定属性值的时候,松散绑定可以使用"xxx_yyy"来绑定驼峰命名法的变量"xxxYyy"

  • 配置文件yml还是properties他们都能获取到值;

  • 如果说,我们只是在摸个业务逻辑中需要获取配置文件中的某项值,使用@Value

  • 如果,专门编写了一个javaBean来和配置文件进行映射,就直接使用@ConfigurationProperties

  • 使用@ConfigurationProperties注解的时候,进行JSR303进行 配置文件值校验

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
    @NotNull
    private String name;
    @Email
    private String userName;

......
}

在这里插入图片描述

配置@PropertiesSource和@ImportResource

  1. 默认情况下SpringBoot是从全局配置文件中获取值,当我们要定义一些于SpringBoot无关的配置的时候,可以自己单独写一个配置文件,例如,将所有于Person有关的配置写在"person.properties"文件之中.

在这里插入图片描述

  • 而后在要获取配置文件值的地方使用"@PropertiesSource"注解指定要引用的文件

在这里插入图片描述
2. 有时候我们会使用xml文件配置Bean的时候,要想获取到xml文件中配置的Bean的时候,可以使用"@ImportResource"注解来引入xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="person2" class="mao.shu.app.entity.Person">
        <property name="name" value="xiemaoshu"/>
        <property name="age" value="22"/>
        <property name="userName" value="admin"/>
    </bean>
</beans>
  • 使用@ImportResource注解来使*.xml配置文件生效

在这里插入图片描述

  • SpringBoot推荐的给容器中添加组件的方式
  • 使用配置类的方式,来添加组件
  • 要定义一个配置类,可以使用@Configuration注解来定义,这个类就相当于是spring的配置文件
  • 示例:
  • 使用"@Bean"配置的方法,会将方法的返回值注入到Spring容器之中,容器中默认的id就是方法名
package mao.shu.app.conf;

import mao.shu.app.entity.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class xiemaosConf {

    @Bean
    public Person person3(){
        Person person = new Person();
        person.setName("xxxxxxxxx");
        person.setAge(23);
        person.setUserName("aaaaaaaaa");
        return person;
    }
}

配置文件占位符

  1. 使用随机数
${random.value}、
${random.int}、
${random.long}
${random.int(10)}、
${random.int[1024,65536
  • 示例:使用随机数
person.name=xiemaoshu${random.uuid}
person.age=${random.int}
  • 控制台输出
Person{
name='xiemaoshub1b06310-ce66-4d92-a056-9e078e1189ec', 
 age=970718249, 

  1. 配置文件设置默认值使用":"符号定义
  • 示例:
person.user-name=${person.admin:xiemaos}
  • 当没有找到person.admin的值的时候,就使用默认值"xiemaos"
  • 控制台输出
 userName='xiemaos'

Profile多环境支持

  1. 多Profile文件
  • 在多配置文件编写的时候,文件名称可以是
application-{profile}.properties/ym
  • {profile}为标识符,可以自定义
  • 示例:定义多个配置文件
  1. application.properties
server.port=8081
  1. application-dev.properties
server.port=8082
  1. application-test.properties
server.port=8083

在这里插入图片描述

  • 默认启动的时候使用的是application.properties配置

在这里插入图片描述

  • 激活方式
  1. 命令行:
--spring.profiles.active=dev
  1. 在主配置文件中设置
spring.profiles.active=dev

在这里插入图片描述

  1. jvm参数
-Dspring.profiles.active=dev
  1. yml多文档块
    • 当使用yml文件配置多环境的时候,可以定义多个文档块类定义不同的环境
    • 在yml文件中使用"—"三个短横线来分割不同的文档块
server:
  port: 8081
spring:
  profiles:
    active:  #active 指定要激活配置
---               #三个短横线用于分隔多个文档块
server:
  port: 8082
spring:
  profiles: prod  # 配置名称
---
server:
  port: 8083
spring:
  profiles: default   # default表示默认配置,在没有指定使用某个配置的时候,默认使用该配置
  1. 激活指定profile
    1. 在配置文件中指定 spring.profiles
    2. 命令行:java -jar spring-boot-02-config-0.0.1可以直接在测试的时候,配置传入命令
    3. 虚拟机参数;-Dspring.profiles.active=d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值