我们都知道在Spring中有着application.xml文件对Spring进行相关配置,通过web.xml中的contextConfigLocation指定application.xml文件所在位置进行Spring核心配置,那么在SpringBoot中是怎么实现的呢?SpringBoot核心配置文件的名字是已经规定好的,文件名称是application.properties或application.yml,文件目录默认在/src/main/resources路径下。下面看一下xml和yml在写法中有什么区别。

xml写法

<beans>
<bean id="xxx" class="xxx"></bean>
</beans>

 yml写法

person:
name: jane
age: 15
birth: 2005/12/03
bool: true
maps: {k1: v1,k2: v2}
lists:
- bob
- jane

上面是yml的具体写法,但是要强调一下,yml中有几点是必须注意的

1:k:(空格)v: 表示键值对(空格必须有)

2:以空格缩进来控制成绩关系:只要是左对齐的数据都是同一层级的

3:属性和值大小写敏感

4:k:v直接写 字符串默认不需要加单引号和双引号,单引号会转义特殊字符,双引号不会转义特殊字符。

既然已经知道具体写法了,那么SpringBoot是如何获取配置文件中的值呢?先来说一下获取yml中值得方法。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

这里要说明下为什么要在pom.xml中引入这个依赖,由于SpringBoot在获取yml中的数据时需要使用@ConfigurationProperties注解,所以需要添加上面的依赖。

javaBean

@ConfigurationProperties(prefix ="person")
//告诉springboot将本类中所有的属性和配置文件中相关配置进行绑定
@Configuration
@Component
public class Person { private String name; private Integer age; private Boolean bool; private Date birth; private Map<String,Object> maps; private List<Object> lists;

测试

@Controller
public class HelloController { @Autowired
Person person; @ResponseBody
@RequestMapping("/hello")
public String Hello(){
System.out.println(person);
return "Hello World";
}
}

请求结果

这里可以看到已经获取到yml中的属性值。

下面说一下如何获取properties文件中的属性值

properties

person.name=jane
person.age=
person.birth= //
person.bool=true

javaBean

@Configuration
@Component
public class Person { @Value("${person.name}")
private String name; @Value("${person.age}")
private Integer age; @Value("${person.bool}")
private Boolean bool; @Value("${person.birth}")
private Date birth;

请求结果

相信已经有人看到我在yml中是有获取map和list的但是在properties中却没有,这就是yml和properties相比较最重要的一个区别,yml支持复杂类型封装而properties不支持

下面说一下@ConfigurationProperties注解和@value注解得区别

  ConfigurationProperties value
功能 批量注入 单个注入
松散语法绑定 支持  不支持
spEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持  不支持  (maps,lists)

虽然SpringBoot中为我们提供了application.xml/properties配置文件,但是当我们项目中遇到很多类都需要进行配置的话该怎么办呢,总不能把所有的属性都写在一个配置文件中吧,

所以下面说一下如何自定义yml/properties配置文件目录。SpringBoot为我们提供了俩个注解@PropertySource和@ImportResource。

这里需要注意的是@PropertySource用来导入yml和properties文件,而@ImportResource用来导入外部的xml文件,由于我使用@ImportResource导入yml时遇到如下错误

javaBean

@ConfigurationProperties(prefix ="person")
@ImportResource("classpath:/config/person.yml")
//告诉springboot将本类中所有的属性和配置文件中相关配置进行绑定
@Configuration
@Component
public class Person { private String name; private Integer age; private Boolean bool; private Date birth; private Map<String,Object> maps; private List<Object> lists;

启动时报错

前言中不允许有空内容,然后我就去百度翻阅了很多内容,有一个博主也遇到相同的问题,他也在网上翻阅了很多资料发现很多人可能都是复制粘贴的,解决的办法都是就是用notePad方式打开文件,然后保存为 UTF-8 with no BOM 的方式。但是我经过尝试发现还是不行。下面看一下使用@PropertySource注解

javaBean

ConfigurationProperties(prefix ="person")
@PropertySource("classpath:/config/person.yml")
//告诉springboot将本类中所有的属性和配置文件中相关配置进行绑定
@Configuration
@Component
public class Person { private String name; private Integer age; private Boolean bool; private Date birth; private Map<String,Object> maps; private List<Object> lists;

目录结构

运行结果

可以看到没有问题,同理获取properties也是一样的,这里就不过多举例了。

在很长的一段时间我变的颓废混日子,甚至忘了当初选择这个行业的初衷,总是喜欢抱怨种种得不公,我希望以后的日子我能找回那个努力的自己,没有人愿意平平淡淡,碌碌无为过一生,不求无愧于他人,但求无愧于自己,也希望每个在这个行业里为之坚持的伙伴我们都能无愧于自己,成为那个想象中的自己。

SpringBoot(二) SpringBoot核心配置文件application.yml/properties的更多相关文章

  1. SpringBoot启动如何加载application.yml配置文件

    一.前言 在spring时代配置文件的加载都是通过web.xml配置加载的(Servlet3.0之前),可能配置方式有所不同,但是大多数都是通过指定路径的文件名的形式去告诉spring该加载哪个文件: ...

  2. SpringBoot配置(1) 配置文件application&yml

    SpringBoot配置(1) 配置文件application&yml 一.配置文件 1.1 配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的. application ...

  3. Spring Boot 学习之路二 配置文件 application.yml

    一.创建配置文件 如图所示,我们在resources文件夹中新建配置文件application.yml   结构图 二.一些基本配置 server: port: 8090 //配置端口 session ...

  4. spring cloud 配置文件application.yml和bootstrap.yml 的定位,区别和联系

    最近在启用springcloud配置中心server的东西,在整理属性资源的时候,突然发现:用了这么久的springboot,为什么会配置两个属性文件同时存在(application.yml/prop ...

  5. spring cloud 配置文件application.yml和bootstrap.yml 的定位,区别和联系总算是有一点明白了

    最近在启用springcloud配置中心server的东西,在整理属性资源的时候,突然发现:用了这么久的springboot,为什么会配置两个属性文件同时存在(application.yml/prop ...

  6. 启动时查看配置文件application.yml

    Spring Boot Application 事件和监听器 在多环境的情况下. 可能需要切换配置文件的一个对应的属性来切换环境 面临的问题就是 如何在springboot加载完配置文件的时候就可以立 ...

  7. springboot工程读取配置文件application.yml的写法

    现在流行springboot框架的项目,里面的默认配置文件为application.yml,我们怎样读取这个配置文件呢? 先贴上我得配置文件吧 目录结构 里面内容 1 写读取配置文件的工具类 @Con ...

  8. springboot工程读取配置文件application.yml的写法18045

    现在流行springboot框架的项目,里面的默认配置文件为application.yml,我们怎样读取这个配置文件呢? 先贴上我得配置文件吧 目录结构 里面内容 1 写读取配置文件的工具类 @Con ...

  9. Springboot学习:核心配置文件

    核心配置文件介绍 SpringBoot使用一个全局配置文件,配置文件名是固定的 application.properties application.yml 配置文件的作用:修改SpringBoot自 ...

随机推荐

  1. 利用Nginx或koa

    最近在做上传的图片的需求,思考上传之后的图片怎么访问的问题,因为后端是Node,一开始尝试写一个专门的接口通过传入图片的path来查找,试了一下感觉并不理想,因为要为每种类型的文件设置Content- ...

  2. Linux USB 鼠标驱动程序详解(转)

    Linux USB 鼠标驱动程序详解 USB 总线引出两个重要的链表!一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表.设备链表包含各种系统中的 USB 设备以 ...

  3. HINOC2.0标准介绍(1):概述

    本文首发于'瀚诺观察'微信公众号 摘要: 2016年3月18日,国家新闻出版广电总局批准发布了行业标准GY/T 297-2016<NGB宽带接入系统HINOC2.0物理层和媒体接入控制层技术规范 ...

  4. 使用TensorFlow训练自己的语音识别AI

    这次来训练一个基于CNN的语音识别模型.训练完成后,我们将尝试将此模型用于Hotword detection. 人类是怎样听懂一句话的呢?以汉语为例,当听到"wo shi"的录音时 ...

  5. iOS多线程之Thread

    多线程 • Thread 是苹果官方提供的,简单已用,可以直接操作线程对象.不过需要程序员自己管理线程的生命周期,主要是创建那部分 优缺点 面向对象,简单易用 直接操作线程对象 需要自己管理线程生命周 ...

  6. 安卓权威编程指南 挑战练习:实现高效RecyclerView刷新

    Adapter的notifyDataSetChanged方法会通知RecyclerView刷新全部的可见列表项. 在CriminalIntent应用里,这个方法不够高效,我们知道,返回CrimeLis ...

  7. ubuntu 18.04 添加快快捷方式

    1. 创建启动软件的快捷方式的文件 # cd ~/桌面 # vim pycharm18.1.desktop # 注意文件的后缀是 .desktop [Desktop Entry] Version=1. ...

  8. centos 7上openJdk 安装

    为什么不安装Oracle版本 oracle jdk 现在下载太恶心了会被登陆拦截.于是就安装openjdk. 步骤 下载 yum -y install java-1.8.0-openjdk java- ...

  9. jdbc对 数据库的数据进行增删改(两个类)

    1.方法类 package com.com; import java.sql.Connection;import java.sql.DriverManager;import java.sql.Resu ...

  10. js移动端滑倒顶部加载历史消息解决方案!

    最近做了一个语音直播聊天的项目,有一个功能是当没有直播时,进入房间可以查看历史消息,滑动到顶部加载之前的历史消息,我用jquery scroll事件,来判断是否滚动到顶部,问题来了: 首先触发请求事件 ...