04 Spring Boot的配置文件

Spring Boot的配置文件

Spring Boot 使用一个全局配置文件,放置在 src/main/resources 目录或类路径的 /config 下;名称为application.properties 或 application.yml;用于修改 Spring Boot 自动配置的默认值。

YAML语法格式

yml 是 YAML(YAML Ain’t Markup Language)语言,不是一个标记语言;以前的配置文件;大多都使用的是 xxxxx.xml文件;YAML语言,以数据为中心,配置数据的时候具有面向对象的特征;比 json、xml 等更适合做配置文件;

YAML基本语法

  • key: value 表示一对键值对(冒号后面必须要有空格)
  • 使用空格缩进表示层级关系
  • 左侧缩进的空格数目不重要,只要同一层级的元素左侧对齐即可
  • key 与 value 大小写敏感
server:
     port: 8081
     contextPath: /demo

YMAL常用写法

  1. 字面量
    包括数值,字符串,布尔,日期,等;字符串默认不用加上引号;使用 “双引号” 不会转义特殊字符,特殊字符最终会转成本来想表示含义输出,如 name: “mengxuegu \n jiaoyu” 将输出: mengxuegu 换行 jiaoyu;使用 ‘单引号’ 会转义特殊字符,特殊字符当作一个普通的字符串输出,name: 'mengxuegu \n jiaoyu 输出: mengxuegu \n jiaoyu。
  2. 对象 & Map
    key: value,value存储对象,每个值换一行写,注意值要左对齐
    demo:
      map:
        name: 张三
        age: 18
        location: 北京
    
    行内写法:
    demo:
    	map: {name:张三,age:18,location:北京}
    
  3. 数组(List、Set)
    - 值表示数组中的一个元素,写法为:
    demo:
    	list:
    		- java 
    		- php 
    		- python
    

行内写法:

demo:
	list: [java,php,python]

yaml 配置文件注入值

1. 编写 JavaBean:


/**
 * @ConfigurationProperties 告诉SpringBoot将配置文件中对应属性的值,映射到这个组件类中,进行一一绑定
 * prefix = "emp":配置文件中的前缀名,哪个前缀与下面的所有属性进行一一映射
 * @Component 必须将当前组件作为SpringBoot中的一个组件,才能使用容器提供的 @ConfigurationProperties功能;
 */
@Component
@ConfigurationProperties(prefix = "demo.user")
public class UserProperties {
    private String name;
    private Integer age;
    private String location;
    private Date birthday;
    private List list;
    private Map map;
	-------  get\set------
}

2. 编写 application.yml 配置文件

demo:
  user:
    name: admin
    age: 18
    location: 北京
    birthday: 1992-05-22
    list:
      - 1
      - 2
      - 3
    map: {k1: v1, k2: v2}

3. 使用 SpringBoot 单元测试类进行测试

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringbootApplicationTests {

    @Autowired
    private UserProperties userProperties;

    @Test
    void contextLoads() {
        System.out.println(userProperties.getName());
        System.out.println(userProperties.getAge());
        System.out.println(userProperties.getLocation());
        System.out.println(userProperties.getBirthday());
        System.out.println(userProperties.getList());
        System.out.println(userProperties.getMap());
    }

}
  1. 解决提示处理器没有发现
    在这里插入图片描述
    解决:
    在 pom.xml 导入配置文件处理器
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
  </dependency>

properties 配置文件注入值

application.properties 配置文件

demo.user.name = 张三
demo.user.age = 18
demo.user.birthday = 1990/01/01
demo.user.localtion = 北京
demo.user.list = 1,2,3
demo.user.map.K1 = v1
demo.user.map.K2 = v2

使用@Value获取值

@Component
public class UserProperties {
    @Value("${demo.user.name}")
    private String name;
    @Value("${demo.user.age}")
    private Integer age;
    @Value("${demo.user.location}")
    private String location;
    @Value("${demo.user.birthday}")
    private Date birthday;
    @Value("${demo.user.list}")
    private List list;
    @Value("${demo.user.map}")
    private Map map;
}

@Value 与 @ConfigurationProperties 获取值的差异

@ConfigurationProperties@Value示例
实现功能批量注入配置文件的属性值一个一个指定
松散绑定支持不支持user_name==userName
SpEL不支持支持#{10*2}
复杂类型封装支持不支持${demo.user.map}
JSR303数据校验支持不支持如下

JSR303数据校验_配置文件注入的值

校验数据是否为合法:添加 @Validated 注解,在属性上添加对应的注解,如验证邮箱是否正确,只需添加 @Email 注解

使用场景

如果只是在某个业务逻辑中需要获取配置文件中的某个属性值,就使用 @Value
如果专门使用javaBean和配置文件进行映射,就使用 @ConfigurationProperties

加载指定配置文件

@ConfigurationProperties 默认从全局配置文件(application.properties/application.yml)中获取值, 所有配置数据写在全局配置文件中,显得太臃肿了, 可将它们抽取出来,放到其他局部配置文件中。
@PropertySource
用于加载局部配置文件;把需要分离的数据提取出来,在resources 目录下 新建一个properties或yml 文件,把提取的数据放入;使用注解 @PropertySource 加载指定的配置文件;

@Component
@PropertySource(value = "classpath:config/user.properties")
@ConfigurationProperties(prefix = "demo.user")
public class UserProperties {
    private String name;
    private Integer age;
    private String location;
    private Date birthday;
    private List list;
    private Map map;
}

多环境支持

Profile 是 Spring 用来针对不同的环境要求,提供不同的配置支持, 全局 Profile 配置使用的文件名可以是application-{profile}.properties / application-{profile}.yml ;

  • 方式一:
  1. 创建两个文件 application-dev.properties 与 application-prod.properties
  2. 在application.properties激活指定profile
spring.profiles.active=dev
  1. 未指定哪个profile文件时, 默认使用 application.properties 中的配置。
    在这里插入图片描述
    在这里插入图片描述
  • 方式二
    命令行参数指定,可以直接在测试的时候,配置传入命令行参数 --spring.profiles.active=dev
    打jar包运行时:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

在这里插入图片描述

  • 方式三
    虚拟机参数指定
-Dspring.profiles.active=dev

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氵我是大明星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值