部分内容原文地址:

江南一点雨:是时候彻底搞清楚 Spring Boot 的配置文件 application.properties 了!

江南一点雨:Spring Boot中的yaml配置简介



1.Spring Boot 的配置文件 application.properties

在 Spring Boot 中,配置文件有两种不同的格式,一个是 properties ,另一个是 yaml 。

yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要(例如我们在 Spring Cloud Zuul 中的配置),此时我们一般采用 yaml。

1.1 位置问题

当我们创建一个 Spring Boot 工程时,默认 resources 目录下就有一个 application.properties 文件,可以在 application.properties 文件中进行项目配置,但是这个文件并非唯一的配置文件,在 Spring Boot 中,一共有 4 个地方可以存放 application.properties 文件。

  1. 当前项目根目录下的 config 目录下
  2. 当前项目的根目录下
  3. resources 目录下的 config 目录下
  4. resources 目录下

按如上顺序,四个配置文件的优先级依次降低。如下:



这四个位置是默认位置,即 Spring Boot 启动,默认会从这四个位置按顺序去查找相关属性并加载。

也可以在项目启动时自定义配置文件位置。

例如,现在在 resources 目录下创建一个 javaboy 目录,目录中存放一个 application.properties 文件,那么正常情况下,当我们启动 Spring Boot 项目时,这个配置文件是不会被自动加载的。我们可以通过 spring.config.location 属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找 application.properties 文件。



此时启动项目,就会发现,项目以 classpath:/javaboy/application.propertie 配置文件启动。

这是在开发工具中配置了启动位置,如果项目已经打包成 jar ,在启动命令中加入位置参数即可:

java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/

1.2 文件名问题

对于 application.properties 而言,它不一定非要叫 application ,但是项目默认是去加载名为 application 的配置文件,如果我们的配置文件不叫 application ,也是可以的,但是,需要明确指定配置文件的文件名。

方式和指定路径一致,只不过此时的 key 是 spring.config.name 。

首先我们在 resources 目录下创建一个 app.properties 文件,然后在 IDEA 中指定配置文件的文件名:



指定完配置文件名之后,再次启动项目,此时系统会自动去默认的四个位置下面分别查找名为 app.properties 的配置文件。当然,允许自定义文件名的配置文件不放在四个默认位置,而是放在自定义目录下,此时就需要明确指定 spring.config.location 。

配置文件位置和文件名称可以同时自定义。

1.3 普通的属性注入

由于 Spring Boot 源自 Spring ,所以 Spring 中存在的属性注入,在 Spring Boot 中一样也存在。由于 Spring Boot 中,默认会自动加载 application.properties 文件,所以简单的属性注入可以直接在这个配置文件中写。

例如,现在定义一个 Book 类:

public class Book {
private Long id;
private String name;
private String author;
//省略 getter/setter
}

然后,在 application.properties 文件中定义属性:

book.name=三国演义
book.author=罗贯中
book.id=1

按照传统的方式(Spring中的方式),可以直接通过 @Value 注解将这些属性注入到 Book 对象中:

@Component
public class Book {
@Value("${book.id}")
private Long id;
@Value("${book.name}")
private String name;
@Value("${book.author}")
private String author;
//省略getter/setter
}

注意:

Book 对象本身也要交给 Spring 容器去管理,如果 Book 没有交给 Spring 容器,那么 Book 中的属性也无法从 Spring 容器中获取到值。

配置完成后,在 Controller 或者单元测试中注入 Book 对象,启动项目,就可以看到属性已经注入到对象中了。

一般来说,我们在 application.properties 文件中主要存放系统配置,这种自定义配置不建议放在该文件中,可以自定义 properties 文件来存在自定义配置。

例如在 resources 目录下,自定义 book.properties 文件,内容如下:

book.name=三国演义
book.author=罗贯中
book.id=1

此时,项目启动并不会自动的加载该配置文件,如果是在 XML 配置中,可以通过如下方式引用该 properties 文件:

<context:property-placeholder location="classpath:book.properties"/>

如果是在 Java 配置中,可以通过 @PropertySource 来引入配置:

@Component
@PropertySource("classpath:book.properties")
public class Book {
@Value("${book.id}")
private Long id;
@Value("${book.name}")
private String name;
@Value("${book.author}")
private String author;
//getter/setter
}

这样,当项目启动时,就会自动加载 book.properties 文件。

1.4 类型安全的属性注入

Spring Boot 引入了类型安全的属性注入,如果采用 Spring 中的配置方式,当配置的属性非常多的时候,工作量就很大了,而且容易出错。

使用类型安全的属性注入,可以有效的解决这个问题。

@Component
@PropertySource("classpath:book.properties")
@ConfigurationProperties(prefix = "book")
public class Book {
private Long id;
private String name;
private String author;
//省略getter/setter
}

这里,主要是引入 @ConfigurationProperties(prefix = “book”) 注解,并且配置了属性的前缀,此时会自动将 Spring 容器中对应的数据注入到对象对应的属性中,就不用通过 @Value 注解挨个注入了,减少工作量并且避免出错。

2.Spring Boot中的yaml配置简介

spring.config.location属性,另一个则是使用 spring.config.additional-location这个属性,在第一个属性中,表示自己重新定义配置文件的位置,项目启动时就按照定义的位置去查找配置文件,这种定义方式会覆盖掉默认的四个位置,也可以使用第二种方式,第二种方式则表示在四个位置的基础上,再添加几个位置,新添加的位置的优先级大于原本的位置。

配置方式如下:



配置文件位置时,值一定要以/结尾。

2.1 数组注入

yaml也支持数组注入,例如:

my:
servers:
- dev.example.com
- another.example.com

这段数据可以绑定到一个带Bean的数组中:

@ConfigurationProperties(prefix="my")
@Component
public class Config {
private List<String> servers = new ArrayList<String>(); public List<String> getServers{
return this.servers;
}
}

项目启动后,配置中的数组会自动存储到servers集合中。当然,yaml不仅可以存储这种简单数据,也可以在集合中存储对象。例如下面这种:

redis:
redisConfigs:
- host: 192.168.1.1
port: 6379
- host: 192.168.1.2
port: 6380

注入到如下类中:

@Component
@ConfigurationProperties(prefix="redis")
public class RedisCluster{
private List<SingleRedisConfig> redisConfigs; //setter,getter
}

SpringBoot配置文件 application.properties,yaml配置的更多相关文章

  1. SpringBoot配置文件 application.properties详解

    SpringBoot配置文件 application.properties详解   本文转载:https://www.cnblogs.com/louby/p/8565027.html 阅读过程中若发现 ...

  2. springboot中配置文件application.properties的配置详情,数据源配置

    pring Boot使用了一个全局的配置文件application.properties,放在src/main/resources目录下或者类路径的/config下.Sping Boot的全局配置文件 ...

  3. SpringBoot配置文件application.properties详解

    喜欢的朋友可以关注下,粉丝也缺. 相信很多的码友在接触springboot时,不知道怎么去配置一些项目中需要的配置,比如数据源,tomcat调优,端口等等,下面我就给大家奉献出一些项目中常用的配置信息 ...

  4. SpringBoot 配置文件application.properties

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

  5. springBoot配置文件application.properties

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

  6. SpringBoot 配置文件 application.properties(二)

    mvc spring.mvc.async.request-timeout设定async请求的超时时间,以毫秒为单位,如果没有设置的话,以具体实现的超时时间为准,比如tomcat的servlet3的话是 ...

  7. SpringBoot 配置文件 application.properties

    转:http://www.qiyadeng.com/post/spring-boot-application-properties #########COMMON SPRING BOOT PROPER ...

  8. springboot配置文件application.properties更新记录(自学使用)

    #应用名称spring.application.name=demo #应用根目录server.context-path=/demo #应用端口server.port=8084 #错误页,指定发生错误时 ...

  9. SpringBoot在logback.xml中读取application.properties中配置的日志路径

    1.在springboot项目中使用logback记录日志,在logback.xml中配置日志存储位置时读取application.properties中配置的路径,在 logback.xml中配置引 ...

随机推荐

  1. Dreamoon Likes Coloring 【CF 1329 A】

    传送门 思路:"Dreamoon will choose a number pipi from range [1,n−li+1](inclusive) and will paint all ...

  2. Redis原理知识点集锦

    1.Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 高级数据结构 HyperLogLog:基数统计 GEO:地理位置 PUB/SU ...

  3. Liunx运维(八)-LIunx磁盘与文件系统管理命令

    文档目录: 一.fdisk:磁盘分区工具 二.partprobe:更新内核的硬盘分区表信息 三.tune2fs:调整ext2/ext3/ext4文件系统参数 四.parted:磁盘分区工具 五.mkf ...

  4. 第十八章节 BJROBOT 安卓手机 APP 建地图【ROS全开源阿克曼转向智能网联无人驾驶车】

    1.把小车平放在地板上,用资料里的虚拟机,打开一个终端 ssh 过去主控端启动roslaunch znjrobotbringup.launch 2.在虚拟机端再打开一个终端,ssh 过去主控端启动ro ...

  5. 010_MySQL

    目录 初识MySQL 为什么学习数据库 什么是数据库 数据库分类 MySQL简介 Windows安装MySQL 安装建议 软件下载 安装步骤 安装SQLyog 下载安装 连接数据库 简单操作 命令行连 ...

  6. maven 的安装与配置详细步骤

    1. 直接搜索maven 2. 进入后点击download界面,这时出现的是当前最新版本, 当然还有以前的版本可供下载 3. 下载解压到你指定的目录后,需要配置一下环境变量. a. 右键此电脑点击属性 ...

  7. ubuntu环境下搭建Hadoop集群中必须需要注意的问题

    博主安装的hadoop是3.1.3这里是按照厦门大学那个博客安装的,在安装与启动过程中,费了不少事,特此记录一下问题. 安装的连接: 安装环境:http://dblab.xmu.edu.cn/blog ...

  8. 二进制格式 PLY 模型文件的读取与渲染

    PLY 文件头部信息: ply format binary_little_endian 1.0 comment VCGLIB generated element vertex 13469 proper ...

  9. Redis 设计与实现 10:五大数据类型之有序集合

    有序集合 sorted set (下面我们叫zset 吧) 有两种编码方式:压缩列表 ziplist 和跳表 skiplist. 编码一:ziplist zset 在 ziplist 中,成员(mem ...

  10. git 遇到 fatal: loose object xxxx (stored in .git/objects/cb/xxxx) is corrupt 问题

    我的git版本是2.3.x,用下面这个参考链接的方法也可以解决 参考blog