在项目开发中经常会用到配置文件,之前介绍过Spring Boot 资源文件属性配置的方法,但是很多朋友反馈说介绍的不够详细全面。所以, 今天完整的分享Spring Boot读取配置文件的几种方式!

Spring Boot 支持多种格式的配置文件格式,目前最常用的配置文件格式是 properties和 yml。所以,这里默认是用.properties文件,其实,yml格式文件的用法也基本类似。Spring Boot 最常用的几种读取配置文件的方法:分别是@Value注解,@ConfigurationProperties注解和Environment接口。这三种注解可以配合着@PropertySource来使用。

一、使用@Value注解

使用@Value注解,默认读取的是application.properties。如果是自定义的配置文件,则需要用 @PropertySource 来指定具体要读取的配置文件。

1、application.properties 配置文件增加如下配置

# 自定义配置
com.weiz.costum.name=weiz-value
com.weiz.costum.website=www.weiz.com
com.weiz.costum.language=java

2、读取配置

 @Value("${com.weiz.costum.name}")
private String name;
@Value("${com.weiz.costum.website}")
private String website;
@Value("${com.weiz.costum.language}")
private String language; @RequestMapping("/getvalue")
public String getValue() {
System.out.println(name);
System.out.println(website);
System.out.println(language);
return "getvalue";
}

代码说明:

1、@Value 为读取配置的注解。需要配置完整的key路径。

2、@Value 默认读取application.properties 文件,如果需要自定义配置文件,需要通过@PropertySource 指定。

上面的代码,可以把@Value 的相关代码封装到单独的类中,在该类增加@Component注解,然后读取配置文件。然后在调用的类中注入该类即可。

二、使用Environment读取文件

Environment的使用非常方便,只要在使用的类中注入Environment,就能很方便就读取到相应的配置。

    @Autowired
private Environment env; @RequestMapping("/getenv")
public String getEnvironment() {
System.out.println(env.getProperty("com.weiz.resource.name"));
System.out.println(env.getProperty("com.weiz.resource.website"));
System.out.println(env.getProperty("com.weiz.resource.language"));
return "hello";
}

代码说明:

  1、使用Environment无需指定配置文件,获取的是系统加载的全部配置文件中的配置。

   2、注意配置文件的编码格式。

三、使用@ConfigurationProperties注解

在实际项目中,当项目需要注入的变量值很多时,上述所述的@value 和 Environment 两种方法会比较繁琐,这时候我们通常使用基于类型安全的配置方式,将properties属性和一个Bean关联在一起,即使用注解@ConfigurationProperties读取配置文件数据。

1、增加自定义配置文件

在src\main\resources下新建website.properties配置文件:

com.weiz.resource.name=weiz
com.weiz.resource.website=www.weiz.com
com.weiz.resource.language=java

2、增加自定义配置对象类

首先创建WebSiteProperties 自定义配置对象类。然后,使用@ConfigurationProperties 注解将配置文件属性注入到自定义配置对象类中

package com.weiz.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; @Configuration
@ConfigurationProperties(prefix = "com.weiz.resource")
@PropertySource(value = "classpath:website.properties")
public class WebSiteProperties {
private String name;
private String website;
private String language; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getWebsite() {
return website;
} public void setWebsite(String website) {
this.website = website;
} public String getLanguage() {
return language;
} public void setLanguage(String language) {
this.language = language;
}
}

代码说明:

  1、@ConfigurationProperties(prefix = "com.weiz.resource") 绑定属性,其中prefix表示所绑定的属性的前缀。

  2、@PropertySource(value = "classpath:website.properties") 指定读取的配置文件及其路径。

通过上面的WebSiteProperties类,即可读取全部对应的配置项。

3、使用配置

    @Autowired
private WebSiteProperties properties; @RequestMapping("/getpro")
public String getProperties() {
System.out.println(properties.getName());
System.out.println(properties.getWebsite());
System.out.println(properties.getLanguage());
return "hello";
}

上面的代码可以看到,使用非常简单,只需将之前定义的WebSiteProperties 配置类注入即可。

四、经验与坑

在实际项目中,会碰到很多读取配置文件的业务场景,需要注意各种坑,否则会让你很惆怅。

  1、yml 文件注意空格和格式缩进。

  2、properties文件默认使用的是iso8859-1。容易出现乱码问题,如果有中文,如要指定编码格式。

  3、系统中 yml文件的加载顺序高于properties,但是读取配置信息的时候会读取后加载。

  4、@PropertySource注解默认只会加载 properties文件,yml 文件这不需要此注解。

  5、@PropertySource注解可以与任何一种方式联合使用。

  6、简单值推荐使用@Value,复杂对象推荐使用@ConfigurationProperties。

最后

以上,就把Spring Boot如何资源文件属性配置介绍完了。

这个系列课程的完整源码,也会提供给大家。大家关注我的微信公众号(架构师精进),回复:springboot源码 ,获取这个系列课程的完整源码。

Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!的更多相关文章

  1. Spring Boot入门系列(十五)Spring Boot 开发环境热部署

    在实际的项目开发过中,当我们修改了某个java类文件时,需要手动重新编译.然后重新启动程序的,整个过程比较麻烦,特别是项目启动慢的时候,更是影响开发效率.其实Spring Boot的项目碰到这种情况, ...

  2. Spring Boot入门系列(十六)使用pagehelper实现分页功能

    之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...

  3. 学习Spring Boot:(二十五)使用 Redis 实现数据缓存

    前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...

  4. Spring Boot入门系列(十四)使用JdbcTemplate操作数据库,配置多数据源!

    前面介绍了Spring Boot 中的整合Mybatis并实现增删改查.如何实现事物控制.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/c ...

  5. Spring Boot入门系列(十)如何使用拦截器,一学就会!

    前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhon ...

  6. Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查

    之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...

  7. Spring Boot入门系列(十九)整合mybatis,使用注解实现动态Sql、参数传递等常用操作!

    前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类. 接下来介绍使用mybatis 常用注解以及如何传参数等数据库 ...

  8. Spring Boot教程(二十五)返回JSON格式

    在上述例子中,通过@ControllerAdvice统一定义不同Exception映射到不同错误处理页面.而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这 ...

  9. Spring Boot入门系列(二十)快速打造Restful API 接口

    spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...

随机推荐

  1. xshell中操作服务器笔记

    sudo su 获取root权限 cd 切换到相应文件夹 ll ls 查看文件夹内容 cp file folder 复制文件到文件夹 \cp为强制覆盖不提示 cp -r /packageA/* /cp ...

  2. netty系列之:netty初探

    目录 简介 netty介绍 netty的第一个服务器 netty的第一个客户端 运行服务器和客户端 总结 简介 我们常用浏览器来访问web页面得到相关的信息,通常来说使用的都是HTTP或者HTTPS协 ...

  3. HashMap的转化时机

    HashMap的转化时机 /** * 使用红黑树(而不是链表)来存放元素.当向至少具有这么多节点的链表再添加元素时,链表就将转换为红黑树. * 该值必须大于2,并且应该至少为8,以便于删除红黑树时转回 ...

  4. Couchdb 任意命令执行漏洞(CVE-2017-12636)

    影响版本:小于 1.7.0 以及 小于 2.1.1 该漏洞是需要登录用户方可触发,如果不知道目标管理员密码,可以利用CVE-2017-12635先增加一个管理员用户 依次执行如下请求即可触发任意命令执 ...

  5. Java的三种日期工具 Date Calendar SimpleDateFormat

    三种日期工具 配合下面的案例可以更加深度的了解 Date 需要导包java.util.Date Date d = new Date(); //两种都是获取到现在时间的时间戳 long t1 = d.g ...

  6. Mybatis学习笔记-注解开发

    面向接口编程 根本原因:[解耦],[可拓展],[更高规范性] 接口类型: abstract class interface 使用注解开发 简单语句可用注解开发(直接查询,列名与属性名相同) 本质:反射 ...

  7. CF466C 题解

    Description 给定一个数组,求有多少组 \(i,j\) 将整个数组分成和相等的三个数组. Solution 从左往右看一遍,记录每一个 \(i\) 使得 \(\sum_{k=1}^i a_k ...

  8. Java基础——变量与常量及命名规范

    变量 ()  public class Demon04{     //类变量 static     static double salary=2500;     //属性: 变量 ​     //实例 ...

  9. 字节跳动五面都过了,结果被刷了,问了hr原因竟说是...

    说在前面,面试时最好不要虚报工资.本来字节跳动是很想去的,几轮面试也通过了,最后没offer,自己只想到几个原因:1.虚报工资,比实际高30%:2.有更好的人选,这个可能性不大,我看还在招聘.我是面试 ...

  10. 阿里云视频点播获取视频点播的video信息

    背景 因为在项目中需要使用阿里云的视频点播服务,需要获取视频点播的时长信息. 工具类 生成签名串Signature SignatureUtils.java package com.meeno.wzq. ...