当前位置: 首页 > news >正文

【JavaEE】Spring Boot配置文件

目录

  • 一、Spring Boot配置文件简介
  • 二、properties 配置⽂件说明
    • 2.1 properties 基本语法
    • 2.2 @value("${}")读取配置⽂件
  • 三、yml 配置文件说明
    • 3.1 yml 基本格式
    • 3.2 yml 配置数据类型 及 读取
    • 3.3 yml配置对象及读取@ConfigurationProperties(prefix = "")
    • 3.4 配置集合 及读取
    • 配置Map及读取

一、Spring Boot配置文件简介

配置⽂件主要是为了解决硬编码(代码写死)带来的问题, 把可能会发⽣改变的信息, 放在⼀个集中的地⽅, 当我们启动某个程序时, 应⽤程序从配置⽂件中读取数据, 并加载运⾏.

SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的.
很多项⽬或者框架的配置信息也放在配置⽂件中,⽐如:

  • 项⽬的启动端
  • 数据库的连接信息(包含⽤⼾名和密码的设置)
  • 第三⽅系统的调⽤密钥等信息
  • ⽤于发现和定位问题的普通⽇志和异常⽇志等.

Spring Boot 配置文件格式:

  • application.properties
  • application.yml
  • application.yaml

说明:

  • yml格式是yaml的简写模式。
  • properties和yml配置格式可以共存,两个配置取并集,当有冲突(对同一个配置都操作了),以properties为准(properties优先级更高)
  • SpringBoot配置文件的文件名默认必须是application,其它名需要自己设置,否则就算有后缀也不会当成是配置文件。

二、properties 配置⽂件说明

2.1 properties 基本语法

基本语法如下:

  • properties 是以键值的形式配置的,key 和 value 之间是以"="连接的;
  • key的每个单词之间建议使用 点 . 分隔开。

2.2 @value(“${}”)读取配置⽂件

主动的读取配置⽂件中的内容,可以使⽤@Value 注解来实现。@Value 注解使⽤" ${} "的格式读取,在大括号中写配置的key。

package com.example.springioc.controller;

import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;

@Controller
public class USController {
    @Value("${my.key}")
    private String myKey;

    @PostConstruct
    public void init() {
        System.out.println("my.key = "+myKey);
    }

}

注意事项:

  • 配置中设置key-value的时候,指不用考虑类型,在我们代码中拿到值的时候会转换成变量的类型。
  • 当然有些类型是不会转换成功的,例如当你在配置文件中写了一个字符串,使用int类型来接收就会出错。
  • 由于我们每个配置的可以都要写完全,就会导致properties 配置⽂件中会有很多的冗余的信息。my.key1=1 my.key2=1如上两个配置的my在properties格式下就不能合并。

三、yml 配置文件说明

3.1 yml 基本格式

基本格式如下:

  • 一级,key: valuekey之后的冒号与冒号之后的一个空格都不能省略;
  • 多级,key的每个单词占一行,并且在单词后面加冒号,且不能出现级数的单词相同不放在一起
  • 在同一个级别下面的单词要对准(建议与上一级隔两个空格),不对齐会将同级认为父子级

3.2 yml 配置数据类型 及 读取

对于数据类型只有两个需要特别注意,其它都是直接写

  • 一个波浪号代表nullnull: ~
  • 空字符串,不写或者使用空单引号empty: ''

对于配置的读取与上面的properties配置读取方法一样使用@value(“${}”),对于不同级别的单词使用点连接。例如上面的配置读取

@value("${spring.datasource.url}")

3.3 yml配置对象及读取@ConfigurationProperties(prefix = “”)

对于类对象的配置,直接用一个两级写法即可,外面单词就是类名,里面的单词就是属性。

person:
  name: zhangsan
  age: 18
  id: 111

对于配置的读取,我们使用注解@ConfigurationProperties(prefix = “”) 引号中写类名。

@Data
@ConfigurationProperties(prefix = "person")
@Configuration

public class Person {
    private String name;
    private String id;
    private Integer age;

    private Integer age44;

}

注意事项:

  • 注解去配置文件中拿属性的时候是根据属性名字对应的
  • 注解只会管类中的属性是否跟配置文件有对应,有就赋值,没有不会报错。

3.4 配置集合 及读取

只需要在上面的语法中,给key赋值value时每个value值用短斜杠加空格即可。例如下面的name就是一个集合。

person:
  name:
    - zhangsan
    - lisi
  age: 18
  id: 111

对于配置的读取,我们使用注解@ConfigurationProperties(prefix = “”) 引号中写类名,然后属性名对应即可。

package com.example.springioc.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Data
@ConfigurationProperties(prefix = "person")
@Configuration("person")

public class Person {
    private List<String> name;
    private String id;
    private Integer age;

    private Integer age44;

}

配置Map及读取

配置Map就跟基础语法中配置多级时的一样。

person:
  name:
    - zhangsan
    - lisi
  age: 18
  id:
    id1: 111
    id2: 222
    id3: 333

对于配置的读取,我们使用注解@ConfigurationProperties(prefix = “”) 引号中写类名,然后属性名对应即可。

package com.example.springioc.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Map;

@Data
@ConfigurationProperties(prefix = "person")
@Configuration("person")

public class Person {
    private List<String> name;
    private Map<String,String> id;
    private Integer age;

    private Integer age44;

}

相关文章:

  • Docker基础入门(一)
  • STM32 单片机常见的 8 种输入输出模式
  • 解决远程主机允许路由转发 【原理扫描】:将/proc/sys/net/ipv4/ip_forward 置为0
  • HarmonyOS学习第20天:让应用“找准方向”的地图与定位秘籍
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-8.1.2近似最近邻(ANN)算法选型
  • 用Python写一个天气预报小程序
  • C++学习——顺序表(四)
  • SpringMVC (一)基础
  • 日志系统项目——准备工作了解类的设计模式如单例模式、工厂模式、代理模式
  • 图片隐写wp
  • 【eNSP实战】交换机和路由器配置链路聚合
  • 【MySQL】数据类型
  • API调用comfyui工作流,做一个自己的app,chatgpt给我写的前端,一键创建自己的卡通形象,附源码
  • 利用axios库的爬虫程序如何使用HTTP
  • 【Go | 从0实现简单分布式缓存】-7:增加etcd和gRPC功能
  • Windows控制台函数:设置区域属性函数FillConsoleOutputAttribute()
  • 静态路由配置实验相关过程
  • SOAP和REST的区别
  • 全方位 JVM 调优参数详解
  • 【BUG分析】微服务无法读取Nacos中的共享配置
  • 两名游客刻划八达岭长城,被拘5日罚200元
  • 8000余万元黄金投入研发后“不知去向”,咋回事?
  • 新冠阳性率升高,专家:新冠变异株致病力没太多变化
  • 外交部:巴基斯坦副总理兼外长达尔5月19日至21日访华
  • 中共中央、国务院印发《党政机关厉行节约反对浪费条例》
  • 意德首脑会谈,梅洛尼警告欧盟绿色政策面临“工业荒漠化”