1、注入配置文件值-@ConfigurationProperties

yml配置文件:

person:lastName: lurenyinage: 20student: truebirth: 1999/06/28maps: {k1: v1,k2: v2}lists:- lurenyan- springbootDog:name: 狗子age: 3

javaBean:

/*** @ConfigurationProperties告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;* prefix = "person" 用来指明配置文件中哪个下面的所有属性进行一一映射;* 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能;*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String lastName;private Integer age;private Boolean student;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;// 省略getter和setter方法以及toString
}

在此之前可以先导入配置文件处理器,这样我们以后在编写配置文件时就有提示啦!

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

2、properties配置文件的编码问题

接下来我们看一下properties配置文件的编写:

person.last-name=路人寅
person.age=20
person.student=true
person.birth=1999/06/28
person.maps.k1=v1
person.maps.k2=v2
person.lists=lurenyin,springboot
person.dog.name=狗子
person.dog.age=3

这样我们在启动测试运行的时候就可以看到打印输出结果了:

但是我们会发现我们的中文输出结果是乱码!原因是IDEA使用的是UTF-8编码,而properties文件使用的是ASCII编码,所以在运行时需要转成ASCII编码,我们需要修改以下设置:

这样乱码的问题就解决了:

3、注入配置文件值-@Value方法

yml配置文件同上;

javaBean:

/*** Value值可以是字面量/${key}从配置文件中获取的值/#{SpEL}* 这里我只注入了三个作为测试*/
@Component
public class Person {@Value("${person.lastName}")private String lastName;@Value("#{11*2}")private Integer age;@Value("true")private Boolean student;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;//省略getter和setter方法以及toString
}

运行结果如下:

4、@Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 单个注入
松散语法 支持 不支持
SpEL 不支持 支持
JSR 303数据校验 支持 不支持
复杂类型封装 支持 不支持
  • 那松散语法该怎样理解呢?直白的上个例子:

先上个小知识点:属性名匹配规则:

标准方式:person.lastName
方式一:person.first-name
方式二:person.first_name

以上三种方式都可以使用;

properties配置文件里是这样滴:

@ConfigurationProperties支持松散语法是这样的情况,用@ConfigurationProperties方法注入:

这个运行是不会报错的,这里我就不运行啦~

@Value不支持松散语法是这样滴,用@Value方法注入:

lastName与配置文件里的last-name不一致,这个结果会报错!

  • SpEL(Spring Expression Language),即Spring表达式语言,上个例子叭~

@ConfigurationProperties注入不支持SpEL:下面这种写法就是不可以的!

@Value注入支持SpEL:

  • JSR 303数据校验也举个例子叭~

使用JSR 303数据校验要先加@Validated注解,还要导入下面的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

这里我拿@Email来测试,JSR 303 基本的校验规则可参看JSR303 | 易学教程

测试如下:

由于lurenyin不是邮箱格式,所以会报错,@Email校验起了作用,所以支持JSR 303校验。

@Value方法直接忽略JSR 303校验!所以不支持!

  • 一个最主要的区别是@Value不支持复杂类型封装:

所以具体要使用哪种方式注入配置文件值,大家可以细细斟酌一下喔~

如果感觉有用的话可以给个赞不呀~

idea yml变成文件了_初识SpringBoot之配置文件(二)——配置文件值注入相关推荐

  1. java参数值注入_在springboot中使用注解将值注入参数的操作

    后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息.可以把获取在shiro中的登陆者信息封装在一个类中,使用时获 ...

  2. matlab 创建批量文件夹_初识MATLAB

    1. MATLAB是什么? MATLAB,是"matrix laboratory"的缩写形式,意思是矩阵实验室.MATLAB是在1984年由一个大学生把数学课的教学课件重新编程设计 ...

  3. java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  4. springboot 事务嵌套问题_在springboot中写单元测试解决依赖注入和执行后事务回滚问题...

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  5. python内置模块在哪个文件夹_用 Python 内置模块处理 ini 配置文件

    简介 开发人员每天都在处理一些大型而复杂的项目, 而配置文件会帮到我们并节省不少时间.在处理配置文件过程中,无需更改源代码本身,只需要调整配置文件即可访问不同的API接口.更新基础URL信息或其它事情 ...

  6. bin文件对比_网罗几种中Python配置文件方式,总有一款适合你

    网罗几种中Python配置文件方式,总有一款适合你 提起Python的的配置文件,估计你去问10个人,每个人给你的答案多多少少都不一样,原因就是轮子太多了,并没有一个足够好到让大家普遍都接收的,所以在 ...

  7. maven 不编译jasper文件_第一个SpringBoot项目、核心配置文件properties(yml、yaml)、集成jsp...

    SpringBoot简介及国内关注度 SpringBoot简介: 它用来简化 Spring 应用程序的创建和开发过程,也可以说 Spring Boot 能简化我们之前采用 SpringMVC +Spr ...

  8. application.properties引用其他文件_企业级SpringBoot应用多个子项目配置文件规划、多环境支持(一)...

    前言 我们在日常开发过程中,在新建一个项目中,我们经常会将一个项目按照功能性.模块等将一个项目分成多个子项目,这些子项目都包含在主项目中. 今天老顾就介绍企业应用中,分布式项目如何将配置分为开发环境. ...

  9. jsp拿不到回显数据_第一个SpringBoot项目、核心配置文件properties(yml、yaml)、集成jsp...

    SpringBoot简介及国内关注度 SpringBoot简介: 它用来简化 Spring 应用程序的创建和开发过程,也可以说 Spring Boot 能简化我们之前采用 SpringMVC +Spr ...

最新文章

  1. java InputStream读取数据问题【转http://cuisuqiang.iteye.com/blog/1434416】
  2. Undefined、Null区别渗透
  3. 华大 MCU 之七 DMA 导致 SPI 异常停止的原因分析、DMA 配置的那些坑
  4. 【JQuery】ajax 调用
  5. ifconfig命令找不到_02. Linux命令之查看网络连接
  6. java mssql mysql,在JSP中访问MSSQLServer数据库_MySQL
  7. html表单自动编号,自动编号插件
  8. 问题 E: 编写函数:求数组中的最小值 (Append Code)
  9. 使用容器和Elasticsearch集群对Twitter进行监控
  10. 001 初学android开发,从搭建环境开始(jdk+eclipse+android sdk+windows7)
  11. AcWing 91. 最短Hamilton路径(状态压缩DP+哈密顿回路)
  12. OpenNLP进行中文命名实体识别(上:预处理及训练模型)
  13. 【笔记】74HC573的一些记录
  14. (一)遗传算法基本概念总结
  15. 初中晨读必看古诗名句
  16. 红米手机root之后 eclipse无法打开data目录
  17. 现流行的第三方库及名称
  18. Docker复习07——Docker 网络
  19. C++ 解9*9数独 LeetCode37题
  20. 数据结构实验报告,二叉树的基本操作(C语言)

热门文章

  1. 疫情之后,人工智能该如何走?
  2. 苹果官方将首次参与天猫 618 促销活动;淘宝回应用户账号被禁用980年;Julia 1.5.0 beta1 发布 | 极客头条...
  3. Rust 让人奔溃的那些特性!
  4. 5G 消息绝地求生:盘活短信 VS 击垮微信?
  5. 程序员相亲竟然因为这个被拒绝了......
  6. 如何巧用区块链密码学避免数据“裸奔”?
  7. 化敌为友,微软出手优化 Chrome!
  8. 用 Python 分析了 10000 场吃鸡数据,原来吃鸡要这么玩!
  9. 腾讯云再登 KVM 开源贡献榜,Linux 虚拟化技术将走向何方?
  10. 最近谷歌苹果亚马逊扎堆收购的公司,会不会下一个就是你?