springboot系列4-配置文件及yml、properties、xml对比

【Spring】SpringBoot 配置文件 SpringBoot的配置文件:properties 配置格式和YML配置格式的使用,以及两种配置格式的区别 阅读详情

1、配置文件

spring默认只用两种配置文件:
SpringBoot使用一个全局的配置文件,配置文件名是固定的;

  • *application.properties
  • *application.yml

配置文件的作用:
修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
有以下说法:

  • YAML(YAML Ain’t Markup Language)
  • YAML A Markup Language:是一个标记语言
  • YAML isn’t Markup Language:不是一个标记语言;

标记语言:
以前的配置文件;大多都使用的是 xxxx.xml文件;

YAML:以数据为中心,比json、xml等更适合做配置文件;

YAML:配置例子:

server:
  port: 8082

properties配置:

server.port=8081

xml配置:

<server>
	<port>8081</port> 
</server>

springboot使用properties或yml均可,选一即可。

2、YAML语法:

1、基本语法

k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;
只要是左对齐的一列数据,都是同一个层级的

server:
	port: 8081
	path: /hello

属性和值也是大小写敏感;

yaml中的松散写法

属性名匹配规则(Relaxedbinding)

  • person.firstName:使用标准方式
  • person.first-name:大写用-
  • person.first_name:大写用_
  • PERSON_FIRST_NAME: 推荐系统属性使用这种写法

2、值的写法

字面量:普通的值(数字,字符串,布尔)

  • k: v:字面直接来写;
    • 字符串默认不用加上单引号或者双引号;
    • “”: 双引号;会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
      • name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi ‘’:
    • ‘’单引号; 不会转义特殊字符,特殊字符最终只是一个普通的字符串数据
      • name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

对象、Map(属性和值)(键值对):

方式1:
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式

friends:
  lastName: zhangsan
  age: 20

方式2:行内写法

friend: {lastName: z, age: 12 }

数组(List、Set):

用- 值表示数组中的一个元素

pets:
  - dog
  - cat
  - pig
pet: [dog,cat,pig]

3、配置文件值得注入

1.Person.java

public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;

    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    ...

2.配置文件application.yml

person:
    lastName: hello
    age: 18
    boss: false
    birth: 2017/12/12
    maps: {k1: v1,k2: 12}
    lists:
        ‐ lisi
        ‐ zhaoliu
    dog:
        name: 小狗
        age: 12

3.在bean需要加上注解,才能读配置文件

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * 1: 
 * @ConfigurationProperties:
 * 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 * 
 * 2:
 * @Component:
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

在这里插入图片描述
我们可以导入配置文件处理器,以后编写配置就有提示了
加入依赖:

        <!--导入配置文件处理器,配置文件进行绑定就会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

这样写配置就会提示了:

person:
    last-name: wang #这种写法和lastName都可以

4.单元测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot01SpringworldQuickApplicationTests {

    @Autowired
    Person person;

    @Test
    public void contextLoads() {
        System.out.println(person);
    }
    ...
    //结果
    Person{lastName='hello', age=18, boss=false, birth=Tue Dec 12 00:00:00 CST 2017, maps={k1=v1, k2=12}, lists=[‐ lisi ‐ zhaoliu], dog=Dog{name='小狗', age=12}}

4、properties配置

将application.yml中的内容注释掉,将配置写在application.properties中也行。

server.port=8081
# idea,properties配置文件utf-8
person.last-name=张三
person.age=12
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c

测试结果:

Person{lastName='å¼ ä¸‰', age=12, boss=false, birth=Fri Dec 15 00:00:00 CST 2017, maps={k1=v1, k2=14}, lists=[a, b, c], dog=null}

乱码问题:

在这里插入图片描述

5、@ConfigurationProperties和@Value两种对比

不使用@ConfigurationProperties,对每个属性均时候用@Value注解也可以。
@Value方式:

	@Value是底层注解,同xml中配置bean的方式。
    /**
     * <bean class="Person">
     *      <property name="lastName" value="①字面量/②${key}从环境变量、配置文件中获取值/③#{SpEL}"></property>
     * <bean/>
     */
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {

    @Value("${person.last-name}") //读配置
    private String lastName;
    @Value("#{11*2}") //表达式
    private Integer age;
    @Value("true")  //字面量
    private Boolean boss;

在这里插入图片描述
@ConfigurationProperties可以使用数据校验注解:

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

上述代码即可校验lastName

对比:

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

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

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

6、分离配置

@ConfigurationProperties(prefix = “person”) 默认从全局配置文件中获取值。
以下注解可以指定配置

1、@PropertySource:加载指定的配置文件

@ConfigurationProperties(prefix = "person")
@PropertySource(value = {"classpath:person.properties"})
public class Person {

说明:虽然使用@PropertySource(value = {“classpath:person.properties”})指出了文件位置。还是要@ConfigurationProperties(prefix = “person”)注解。

2、@ImportResource:导入Spring的配置xml文件,让配置文件里面的内容生效

Spring Boot里面没有Spring的配置xml文件,我们自己编写的配置文件,也不能自动识别; 想让Spring的配置文件生效,加载进来;需要将@ImportResource标注在一个配置类上。
beans.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="helloService" class="cn.whbing.springboot01.service.HelloService">
        
    </bean>
</beans>

上述beans是想将HelloService注入到容器。如果直接建配置文件不会生效,需要在主配置类上加注解。
主配置加上@ImportResource注解:

@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效
@ImportResource(locations = {"classpath:beans.xml"}) //加载xml配置
@SpringBootApplication
public class HelloworldQuickApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloworldQuickApplication.class, args);
    }
}

测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot01SpringworldQuickApplicationTests {

    @Autowired
    Person person;

    @Autowired
    ApplicationContext ioc; //上下文

    @Test
    public void contextLoads() {
        System.out.println(person);
    }

    @Test
    public void helloServiceTest(){
        boolean b = ioc.containsBean("helloService");
        System.out.println(b); //true
    }
}

3、springboot推荐的配置方式

springboot不推荐xml配置文件,推荐全注解方式。
过程:
(1)配置类@Configuration---->Spring xml配置
(2)@Bean给容器中添加组件

/**
 * @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
 *
 * 在配置文件中用<bean><bean/>标签添加组件
 *
 */
@Configuration
public class MyAppConfig {

    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    //显示写出就是用写出的
    //@Bean
    @Bean("helloService02")
    public HelloService helloService01(){
        return new HelloService();
    }
}

测试:


@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot01SpringworldQuickApplicationTests {

    @Autowired
    Person person;

    @Autowired
    ApplicationContext ioc;

    @Test
    public void contextLoads() {
        System.out.println(person);
    }

    @Test
    public void helloServiceTest(){
//        boolean b = ioc.containsBean("helloService");
//        boolean b = ioc.containsBean("helloService01");
        boolean b = ioc.containsBean("helloService02");
        System.out.println(b); //true
    }
}

7、配置文件占位符

1、随机数

${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}

2、占位符获取之前配置的值,如果没有可以是用:指定默认值

person.last‐name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15

上述变量person.hello没有找到,所以使用默认值hello再拼接后边的


8、加载多配置文件

项目的三个配置文件,其中,application.yml是启动服务时,服务器会自动加载的配置文件,而application-dev.yml代表的是开发环境的配置文件,application-prod.yml代表的是生产环境的配置文件,后两个文件在启动服务时,服务器不会自动加载,那么在不同的环境中时怎么调用不同的文件的呢?

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml

1、方式1:写多个.yml的配置文件,然后在application.yml中激活。见springboot多配置
2、方式2:yml支持多文档块方式

server:
    port: 8081
spring:
    profiles:
    active: prod
‐‐‐
server:
    port: 8083
spring:
    profiles: dev
‐‐‐
server:
    port: 8084
    spring:
profiles: prod #指定属于哪个环境

激活指定profile

1、在配置文件中指定 spring.profiles.active=dev

2、命令行:

java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev; 

可以直接在测试的时候,配置传入命令行参数

3、虚拟机参数;

-Dspring.profiles.active=dev


9、配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

–file:./config/

–file:./

–classpath:/config/

–classpath:/

SpringBoot会从这四个位置全部加载主配置文件;互补配置;

我们还可以通过spring.config.location来改变默认的配置文件位置

项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默 认加载的这些配置文件共同起作用形成互补配置;

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar  --spring.config.location=G:/application.properties

配置根目录

server:
  context-path: /boot

则访问时,都要加/boot
http://localhost:8081/boot/hello


10、外部配置加载顺序

SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
在这里插入图片描述

如:
1、命令行参数
所有的配置都可以在命令行上进行指定

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc 

多个配置用空格分开; --配置项=值

[ SpringBoot ] xml配置文件加载yaml、properties文件中的属性 文章目录 相关文章: Springboot加载自定义yml文件配置的方法 从xml配置读取spring yml属性 <!-- 获取属性的配置文件--> <context:property-placeholder location="classpath:config-consumer.properties"/> <bean id="yamlConsumerProperties" class="org.springframework.bea 阅读详情

相关推荐

springboot 读取配置文件 自定义配置文件 以及POM.xml 文件内容

在实际开发中,我们有时候因为开发和部署的环境的不同 一些定义的常量或者对象属性也需要更改 这样就很麻烦 在springboot 如火如荼的今天,我们是否也可以将那些因为不同环境而需要不同修改的常量或者对象也放在配置文件中呢 ,选择不同的配置环境 而无需更改代码,释放咱们的双手!!

胖虎儿的博客 1万+

xml与yml区别

xml与yml都是配置文件,指定类与类之间的依赖关系 xml可扩展标记语言,被设计为传输与存储数据,用来标记数据,定义数据类型,适合web传输,可以自定义标签,一种可以通过JavaScript来获取xml值,另一种可以通过PHP来获取 yml(yaml),比xml更简单易懂的序列化语言,基于流处理,表达能力强,扩展性强,可读性较好 XML概述: 可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数...

z_623623的博客 1万+

LM1875官方电路图元件作用解释说明以及电路调校

R1是为C1提供充放电回路用的电阻,这是老外工作严谨的地方,其实接好电位器之后直流通路就已经存在了,这个加上只能防止最恶劣情况时也能把C1的电能放掉,尽管只有一点点 C1是输入电容,主要作用是隔离前后级的直流信号,但是这个电容对音质的影响很大,可以换用不同的品牌和容量来部分修改音质和音色 R2提供LM1875正输入端的直流电平控制点,接地就表示在理想情况下Lm1875的输出直流电平是0V;还有一个作用就是确定放大器的交流输入阻抗为电阻值。 R3、R4是反馈电阻,这个电路的放大倍数为R4/R3+1=21倍。.

m0_50862404的博客 1万+

JAVA情景剧文本-xml和yml配置文件的区别(用生活中的比喻助你理解)

旨在用生活中的比喻来分享给大家让大家更好的理解技术概念

weixin_48087651的博客 1312

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛。 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口,然后还需要3个IO片选数码管接口,这样大大占用了IO口,导致连接的外设变少。因此我们引入74LS595芯片。电路设计如下: 只需要三个共阴极数码管与三个595芯片级联即可完成,通过RCLK,SCK,SER三个IO即可完成对数码管的动态控制并显示。电路焊接的实物图如下: 要求完成功能:实现数.

XiaoCaiDaYong的博客 8263

Win10更新后黑屏只剩鼠标?火绒误杀explorer.exe的5种自救方案(附详细步骤)

本文详细介绍了Win10更新后出现黑屏只剩鼠标的5种专业修复方案,重点解决火绒误杀explorer.exe的问题。从基础的任务管理器操作到安全模式下的系统修复,再到注册表编辑和系统还原,提供了全面的解决方案,帮助用户快速恢复系统正常运行。

weixin_29306571的博客 636

Properties,xml,yml对比

1. Properties 该文件以后缀.properties结尾,这种文件允许使用key=value的格式存储内容,多用于来做配置文件,Java中用Properties类来读取该配置文件,其他语言也有相应的类去读取properties文件,由于难以表达层次, 复杂的配置文件可以用xml或者yml做配置.用#做注释 2.XML eXtendsible markup language 可扩展的标...

Naruto_c的博客 8549

从零构建AXI接口的DDR3控制器:MIG IP核实战指南

本文详细介绍了如何从零构建AXI接口的DDR3控制器,重点解析MIG IP核的配置流程和优化策略。通过实战案例和仿真验证,帮助开发者掌握FPGA中DDR3控制器的AXI接口设计,提升高速数据传输效率。适用于图像处理、网络加速等高性能应用场景。

weixin_28256233的博客 451

yml和xml分别代表什么

YML和XML.yml.yaml.xml。

zw45607076875的博客 1090

Vue3项目实战:用vue-print-nb搞定多页表格打印(附样式不丢失解决方案)

本文详细介绍了在Vue3项目中,如何利用vue-print-nb插件解决Element Plus多页表格打印的样式丢失与分页错乱等核心难题。通过分离打印视图、编写专用CSS控制分页行为、以及深入理解浏览器打印原理,提供了一套从基础配置到高级技巧的完整企业级打印解决方案,确保打印输出专业可靠。

linux的博客 1232

Yolov8轻量级网络:Ghostnet、G_ghost、Ghostnetv2家族大作战(一):华为Ghostnet,超越谷歌MobileNet | CVPR2020

Yolov8引入轻量级网络Ghostnet、G_ghost、Ghostnetv2等,减少最新的深度神经网络的计算成本,引入高效的神经网络结构。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2564

Spring Boot配置文件:properties 与 yml 的竞争

带你学习Spring Boot中的配置文件:properties 与 yml

做技术人 · 产优质博客 · 找好工作 2468

ubuntu系统禁止/开启内核自动更新

内核自动更新会导致驱动和内核版本不对应,导致驱动无法使用,所以需要禁止自动更新内核。本文介绍ubuntu系统禁止/开启内核更新的方法。

m0_50105717的博客 5289

SpringBoot配置文件的说明 SpringBoot中xml和properties的异同

SpringBoot配置文件的说明 SpringBoot中xml和properties的异同

liangweihao的博客 1233

CCF编程培训师资认证(PTA)标准(教学能力T)

随着计算机科学的不断发展,计算机相关技术应用到社会各个行业,越来越多的青少年参加到了计算机程序设计的学习中,这对编程培训教师提出了更高的专业要求和职业要求。CCF开展编程培训师资认证项目(Programming Trainer Accreditation,PTA),旨在建立一个规范的、科学的、权威且有公信力的三方认证。认证考试分编程专业能力(P)和教学能力(T)两部分。本标准根据《CCF编程培训师资认证条例》第十条制定,旨在明确教学能力(T)的测试标准。

lan_in的博客 1708

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SpringBoot properties配置文件 简单整合MyBatis

文章目录 前言 一、什么是Spring Boot 二、SpringBoot之yml与properties配置文件格式的区别 1.概念: 2.为什么有了properties之后还要有yml呢? ①.properties配置文件: ②.yml配置文件: 三、SpringBoot简单整合MyBatis 前言 提示:之前搭传统的ssm框架,配置文件很多,搭起来也是很麻烦. 今天尝试用springboot来整合,不敢相信才失败几次就成功了!! 提示:以下是本篇文章正文内容,

天亮了叫你 3986

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

配置文件格式(xml、properties、yml/yaml)

3、使用缩进表示层级关系,缩进时,不允许使用Tab建,只能使用空格(idea中会自动将Tab转化为空格),列如:连接数据库所需要的配置和Mybatis中的驼峰命名的配置等,都是存储在此文件中。(yml与yaml两种的格式是一样的所以这里就算成两种配置格式了),而此格式SpringBoot并不会解析此格式的配置文件。4、缩进的空格数目不重要,只要相同层级的元素左边对其即可。5、#表示注释,从这个字符一直到行尾,都会被解析器忽略。其中除了上面的两种之外还有一种较为常见的是。优点:对比XML格式较为。

weixin_68576312的博客 1096

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【SpringBoot】两种配置文件, 详解 properties 和 yml 的语法格式, 使用方式, 读取配置

详解SpringBoot中properties和yml这两种配置文件的语法格式, 系统配置项和自定义配置项的使用方式, 配置信息的读取方式, 使用@Value或@ConfigurationProperties

yzhcjl_的博客 6567

springBoot配置文件properties和yml中数组写法

摘要:这里介绍一下springBoot中的两种文件配置方式中数组的使用,也就是集合。 以下是我springBoot中使用的 application.properties 文件 其实很好理解,我的configs是一个集合,configs[0].appid代表我配置的第一个对象中的appid的值 miniapp.configs[0].appid = 111111 miniapp.con...

馒头花卷儿 2万+

SpringBoot系列—配置文件

滑动拼图的验证码则是把整个图片的长视为[0,1],选取一个值作为拼图块的中心(比如0.5),拖动拼图块则是判断用户拖拽的当前拼图块的中心的值是否位于选择的值的位置。在com.oopsguy.kaptcha.KaptchaProperties的源码中可以发现,作者实现了自动配置,让我们只用在配置文件中写验证码的配置,无需在自己写验证码生成的代码,即可自动生成验证码(底层还是基于Servlet,使用HttpServletRequest req来进行session的存储)。如果key有多级,就用.分隔。

sniper_fandc的博客 1275

SpringBoot2.x常见的配置文件 xml、yml、properties的区别和使用

SpringBoot2.x常见的配置文件 xml、yml、properties的区别和使用 xml、properties、json、yaml 1、常见的配置文件 xx.yml, xx.properties, 1)YAML(Yet Another Markup Language) 写 YAML 要比写 XML 快得多(无需关注标签或引号) ...

a898712940的博客 1346

SpringBoot配置文件及yml、properties、xml对比

SpringBoot配置文件及yml、properties、xml对比

郑某某的博客 2311

SpringBoot中properties和yml有什么区别?

properties 和 yml 都是 Spring Boot 支持的两种配置文件,它们可以看作是 Spring Boot 在不同时期的两款“产品”。在 Spring Boot 时代已经不需要使用 XML 文件格式来配置项目了,取而代之的是 properties 或 yml 文件。 properties 配置文件属于早期,也是目前创建 Spring Boot(2.x)项目时默认的配置文件格式,而 yml 可以看做是对 properties 配置文件的升级,属于 Spring Boot 的“新版”配置文件。

分享Java技术知识,共同成长进步! 2138

springboot打包无法读取yml、properties等配置文件

若已在pom文件中加入配置,打包仍没有读取到指定配置文件,可能时打包方式问题,springboot默认打包方式为jar,但是由于现在很多项目都是分布式多模块开发,导致结构项目没有实际需要编译的代码,这类项目打包方式为pom,若用pom方式打包,则不会读取配置文件。当前资源目录未进行配置,spring boot默认在classpath的/config或者根目录中找.yml和.properties文件,解决办法:需要将你自定义的yml文件路径写道pom.xml文件中。打包方式分为三种:jar、war、pom。

little_fairy66的博客 4013

SpringBoot配置文件yml(或properties)使用pom.xml中的变量

yml中使用pom中的变量 在pom文件中增加(使用maven渲染yml) <build> <resources> <resource> <directory>src/main/resources</directory> ...

不如一默 2万+
上一篇: springboot系列3-idea快速创建springboot
下一篇: springboot系列5-自动配置
王小禾
博客等级 码龄11年 80粉丝 291原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值