我们都知道在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. 变身六次失去核心的小米Note还能火吗

    奥特曼变身有时间限制,因此我们总是希望它多变几次身,从而把小怪兽打得嗷嗷叫.但对于科技产品来说,不断推出"变身版",似乎总有江河日下.大势已去之感.三星形形色色的复仇者联盟S6版, ...

  2. 用Gitolite搭建服务器上的Git

    使用git作为版本控制工具,确实非常流行且好用,常用的git代码服务器有Github还是国内的Gitcafe和OSC都是很不错,可以免费存放一些开源的项目代码,对于私人项目,则需要支付一定的费用.同时 ...

  3. Python-添加psutil模块到python2.7版本

    一.问题描述 1.导入模块psutil时提示报错:ImportError: No module named psutil 2.下载psutil模块后,安装python setup.py install ...

  4. js的几个库

    http://www.w3.org/TR/FileAPI/ http://www.w3.org/TR/html-media-capture/ demo:http://jsfiddle.net/pmat ...

  5. 万达乐园VS阿里帝国 谁将是未来娱乐产业的龙头?

    国内实体行业大佬王健林和互联网行业巨头马云,这次又不约而同地想到一块去了.从王健林叫板迪士尼大搞借势营销,到最近马云成立大文娱工作领导小组,明显的趋势表明娱乐越来越成为各界大佬们未来掘金的新战场.只不 ...

  6. redis集群配置及python操作

    之前我们分析过喜马拉雅的爬取信息,使用分布式爬取,而且需要修改scrapy-redis的过滤算法为布隆过滤来减少redis内存占用,最后考虑这样还是不一定够,那么redis集群就是更好的一种选择方式了 ...

  7. 从头认识js-js的发展历史

    JavaScript简介 JavaScript诞生于1995年,当时,它的主要目的是处理以前有服务端语言(如Perl)负责的一些输入验证操作. JavaScript简史 1995年2月当时就职于Net ...

  8. 设计模式-12组合模式(Composite Pattern)

    1.模式动机 很多时候会存在"部分-整体"的关系,例如:大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.在软件开发中也是这样,例如,文件系统中的文件与文件夹.窗体 ...

  9. Sketchup二次开发教程

    Sketchup提供了两套API: C API,主要用于读写SU文件.我们的SU文件导入功能就是用这套API做的 Ruby API,用于开发SU插件 这次我们主要关注Ruby API,因为它是实现更丰 ...

  10. DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架

    前言 如果之前你是跟随本教程系列学习的话,应该能够初步了解Effects11(现FX11)的实现机制,并且可以编写一个简易的特效管理框架,但是随着特效种类的增多,要管理的着色器.资源等也随之变多.如果 ...