我们都知道在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. 正则表达式入门-python代码

    题记 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例. 正则表达式在很多的应用中都有使用到,特别是在网络爬虫中格式化html后取出自 ...

  2. rpm报错warning: /var/tmp/rpm-tmp.1OZa8q: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY的解决

    参考链接:http://blog.51cto.com/zymin0823/1546537 报错: 解决:使用如下两个选项

  3. 机器学习迁移模型到IOS

    https://paulswith.github.io/2018/02/24/%E8%BF%81%E7%A7%BB%E5%AD%A6%E4%B9%A0InceptionV3/ 上文记录了如何从一个别人 ...

  4. SecureCRT语法高亮设置

    因为默认情况下,SecureCRT不能显示语法高亮特性,整个界面颜色单一,看起来不爽,也没有效率,所有通过设置一下语法高亮还是很有必要的, 默认字体也看着不是很清晰,还是更改为我比较喜欢的Courie ...

  5. resourcequota分析(一)-evaluator-v1.5.2

    什么是evaluator 大家都知道,Kubernetes中使用resourcequota对配额进行管理.配额的管理涉及两个步骤:1.计算请求所需要的资源:2.比较并更新配额.所以解读resource ...

  6. Machine-learning-DecisionTree

    前言 决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成.结点分为内部结点和叶结点,其中每个内部结点表示一个特征或属性,叶节点表示类别.从顶部根节点开始,所有样本聚在一起,经过根节 ...

  7. 达拉草201771010105《面向对象程序设计(java)》第一周学习总结

    达拉草201771010105<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...

  8. 最新IntelliJ IDEA 2019.3版本永久激活,一步到位!

    简单介绍一下什么是IDEA? IDEA全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手.代码自动提示.重构. ...

  9. frida报错frida.InvalidArgumentError: device not found问题解决方案

    一.问题描述     python安装好frida框架后,在安卓端启动了frida-server,启动要hook的应用,在cmd中执行python脚本,报错frida.InvalidArgumentE ...

  10. NSInteger打印以及字符串的转换

    You can also use %zd (NSInteger) and %tu (NSUInteger) when logging to the console. NSInteger integer ...