SpringBoot配置文件之properties和yml的使用
一、配置文件的作用
配置文件主要是为了解决硬编码带来的问题, 把可能会发生改变的信息,放在一个集中的地方, 当我们启动某个程序时, 应用程序从配置文件中读取数据, 并加载运行。
使用配置文件, 可以使程序完成用户和应用程序的交互, 或者应用程序与其他应用程序的交互。
springboot支持并定义了配置文件的格式,也在另一个层面达到了规范其他框架集成到springboot的目的。很多项目或者框架的配置信息也放在配置文件中, 比如:
- 项目的启动端口;
- 数据库的连接信息(包含用户名和密码的设置);
- 第三方系统的调用密钥等信息;
- 用于发现和定位问题的普通日志和异常日志等。
二、配置文件的格式
spring boot 配置文件有以下三种:
- application.properties
- application.yml
- application.yaml
yml 为yaml的简写, 实际开发中出现频率最高。yaml 和yml 的使用方式一样。
note:
- 理论上讲 .properties 和 .yml 可以并存在于一个项目中,当 .properties 和 .yml 并存时,两个配置都会加载。如果配置文件内容有冲突,则以 .properties 为主,也就是 .properties 优先级更高;
- 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。
三、properties 配置文件说明
properties 配置文件是最早期的配置文件格式,也是创建 springboot 项目默认的配置文件。
3.1 properties 基本语法
properties 是以键值的形式配置的,key 和 value 之间是以 "=" 连接的,如:
# 配置项⽬端⼝号 server.port=8080 #配置数据库连接信息 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb? characterencoding=utf8&usessl=false spring.datasource.username=root spring.datasource.password=root
3.2 读取配置文件
如果在项目中,想要主动的读取配置文件中的内容,可以使用 @value 注解来实现。 @value 注解使用" ${} "的格式读取,如下代码所示:
properties 配置如下:
mykey.key1 = bite import org.springframework.beans.factory.annotation.value; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; @restcontroller public class propertiescontroller { @value("${mykey.key1}") private string key1; @requestmapping("/key") public string key(){ return "读取到值:"+key1; } }
四、yml 配置文件说明
yml 是 yaml 是缩写,它的全称 yet another markup language ,翻译就是 “另一种标记语言“。
4.1 yml基本语法
yml 是树形结构的配置文件,它的基础语法是"key: value"。key 和 value 之间使用英文冒号加空格的方式组成, 空格不可省略。
基础语法举例如下:
spring: datasource: url: jdbc:mysql://127.0.0.0:3306/dbname?characterencoding=utf8&usessl=false username: root password: root
4.2 yml 读取文件
yml 读取配置的方式和 properties 相同,使用 @value 注解即可,实现代码如下:
yml配置:
string: hello: bite
@restcontroller public class readyml { @value("${string.hello}") private string hello; @requestmapping("/ymlkey") public string key(){ return "读取到值:"+hello; } }
note: value值加单双引号
- 字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
- 单引号会转义特殊字符,使其失去特殊功能,始终是一个普通的字符串;如 \n
- 双引号不会转义字符串里面的特殊字符, 特殊字符会表示本身的含义。
yml配置不同数据类型及null:
#以下格式不代表yml文件格式,只是作为说明 # 字符串 string.value: hello # 布尔值,true或false boolean.value: true boolean.value1: false # 整数 int.value: 10 # 浮点数 float.value: 3.14159 # null,~代表null null.value: ~ # "" 空字符串 # 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表示是使⽤引号括起来 empty.value: ''
4.3 yml使用进阶
4.3.1 配置对象
在yml文件中配置对象,如下所示:
student: id: 1 name: java age: 18 #或者可以采用行内写法 student: {id: 1,name: java,age: 18}
这个时候就不能用 @value 来读取配置中的对象了,此时要使用另一个注解@configurationproperties 来读取,具体实现如下:
import lombok.data; import org.springframework.boot.context.properties.configurationproperties; import org.springframework.stereotype.component; @configurationproperties(prefix = "student") @component @data public class student { private int id; private string name; private int age; }
调用类实现如下:
@restcontroller public class studentcontroller { @autowired private student student; @requestmapping("/readstudent") public string readstudent(){ return student.tostring(); } }
4.3.2 配置集合
配置文件也可以配置 list 集合,如下所示:
dbtypes: name: - mysql - sqlserver - db2
集合的读取和对象一样,也是使用 @configurationproperties 来读取的,具体实现如下:
@component @configurationproperties("dbtypes") @data public class listconfig { private listname; }
访问集合的实现如下:
@restcontroller public class readyml2 { @autowired private listconfig listconfig; @requestmapping("/readlist") public string readlist(){ return listconfig.tostring(); } }
4.3.3 配置map
配置文件也可以配置 map,如下所示:
maptypes: map: k1: kk1 k2: kk2 k3: kk3
map的读取和对象一样,也是使用 @configurationproperties 来读取的,具体实现如下:
@component @configurationproperties("maptypes") @data public class mapconfig { private hashmapmap; }
打印类的实现如下:
@restcontroller public class readyml2 { @autowired private mapconfig mapconfig; @requestmapping("/readmap") public string readstudent(){ return mapconfig.tostring(); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
推荐阅读
-
IDEA中使用Gradle构建项目中文报GBK错误的解决方案
-
将Java应用做成exe可执行软件的流程步骤
-
SpringBoot实现多种来源的Zip多层目录打包下载
需要将一批文件(可能分布在不同目录、不同来源)打包成zip格式,按目录结构导出给用户下载。1.核心思路支持将本地服务器上的文...
-
Java中减少if-else的设计模式和优化技巧
前言“过于依赖if-else不仅会让代码变得臃肿不堪,还会使维护成本大大增加。其实,if-else虽然是最基础的条件分支,...
-
Spring Boot 中使用 Drools 规则引擎的完整步骤
-
Spring Boot整合Drools规则引擎实战指南及最佳实践
一、drools简介与核心概念1.1什么是drools?drools是redhat旗下的开源业务规则管理系统(brms),...
-
Springboot项目瘦身之如何将jar包与lib依赖分开打包
将jar包与lib依赖分开打包方法一:项目和依赖完全分离maven-jar-plugin负责生成jar文件(jar文件中...
-
Spring动态修改bean属性配置key的几种方法
静态配置的局限性先来看一个典型场景。假设我们有一个数据源配置类:@configuration@configurationpr...
-
Java如何判断一个IP是否在给定的网段内
-
从零开始学java之二叉树和哈希表实现代码