Springboot配置文件读取

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Springboot配置文件读取

1、配置文件作用

springboot默认有许多的stater供我们使用,并且有很多的配置类都有默认值,这正体现Springboot开发中很重要的一句话 “约定大于配置”,但是如果要根据自己的需求替换默认配置的话,可以通过配置文件修改。

springboot中的配置文件主要用来修改Boot中相关默认的配置,有application.properties或者application.yml(application.yaml)两种配置方式进行配置。

SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件

2、配置文件的语法

对于application.properties配置文件,我们只需通过如下类似的键值对进行配置相关参数即可

server.port=8080

对于yml配置文件

1、基本语法

k:(空格)v:表示一对键值对,空格必须有

以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的。并且属性和值也是大小写敏感的

1. server:
2.   port: 8080

2、值的写法

定义普通变量(数字 字符串 布尔)

直接使用k: v:书写即可,比如 age: 14

如果是字符串,可以加双引号或者单引号,双引号中的特殊字符会表达本身想表示的意思,单引号中的特殊字符将作为普通字符输出

name: "zhangsan \n lisi" 则输出 zhangsan 换行lisi

name: 'zhangsan \n lisi'  则输出 zhangsan \n lisi

定义对象、Map

k: v :在下一行来写对象的属性和值的关系;注意缩进

对象还是 k: v 的方式

maps2:

   key1: value1

   key2: value2

   key3: value3

行内写法

maps: {key1: value1, key2: value2, key3: value3}

定义数组(List、Set)

用-值表示数组中的一个元素

pets:

 -cat

 -dog

行内写法

pets: {cat,dog}

3、配置文件的值绑定到配置类属性上

定义一个部门类和一个person类

配置文件

1. person:
2.   id: 1
3.   name: lisi
4.   age: 12
5.   flag: true
6.   maps: {k1: v1,k2: v2}
7.   lists:
8.  - cat
9.  - dog
10.   department:
11.     id: 1
12.     name: 开发部门

要能绑定配置文件中的属性,只有使用注解@Configuration或者@Component标注让一个类成为容器中的组件才可以绑定属性,不管是yml还是properies配置文件,读取里面的值绑定到属性的方式有两种。

第一种:使用@ConfigurationProperties(prefix = "person")注解,其中的prefix表示这个前缀下面的所有属性

第二种:使用@value()注解,括号中可以是字面量、${配置文件中的值}、#{SpEL表达式},

测试

注意:

1. 使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法

2.绑定的时候导入下面依赖代码自动提示

3.@value和ConfigurationProperties区别如下

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验@Validated 支持 不支持
复杂类型封装 支持 不支持
set get方法 需要 不需要

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

4.将上面yml文件的person配置换成properties配置,同样绑定成功

1. person.id=1
2. person.name=zhangsan
3. person.age=13
4. person. maps.k1=v1
5. person.maps.k2=v2
6. person.lists=a,b,c
7. person.department.id=2
8. person.department.name=开发部门

上面两种方式读取的配置文件默认都是全局的即application配置文件,但是所有的配置都写在全局配置文件中就显得很乱,可以单独自己的配置文件,使用@PropertySource注解加载指定的配置文件

5、@ConfigurationProperties是springboot中引入的一个注解

@ImportResource

@ImportResource用来导入Spring的配置文件,让配置文件里面的内容生效,在SpringBoot里面没有Spring的配置文件,我们自己编写的配置文件也不能识别,想让Spring的配置文件生效,加载进来,使用该注解

@ImportResource(locations = {"classpath:beans.xml"})

导入Spring的配置文件让其生效

 

4、配置文件中使用占位符

1. #可以使用随机数
2. person.id=1${random.uuid}
3. #可以使用前面配置过的属性
4. person.name=zhangsan${server.port}
5. #可以使用自己配置过的属性
6. person.age=13${person.id}

常用的随机数

5、Profile多环境配置

当我们的应用需要部署到不同的运行环境时,一些配置细节通常会有所不同,最简单的比如日志,生产环境下会将日志级别设置为warn或者更高级别的,并将日志写入日志文件,但是开发环境下需要将日志级别设置为DUBUG,日志输出到控制台即可,如果按照以前的做法,每次发布的时候替换掉配置文件,这样太麻烦了Springboot的Profile就解决了这一问题,命令带参数就搞定

如下图我们可以针对不同环境定义对应的配置文件

在主配置文件中通过spring.profiles.active=dev或者spring.profiles.active=pro选择即可

除了上面这种选择性引入对应的配置文件,常见的其他几种方式如下

1.运行的时候Edit配置文件

2.打包项目的时候

java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

6、配置文件的位置

boot启动之后默认从以下位置从1到4加载配置文件,优先级由高到低

项目打包好以后,我们还可以使用命令行参数的形式在启动项目的时候来指定配置文件的新位置

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties

这种写法会形成互补配置,特别是在运维的时候,可以运行的时候使用外部一些配置。

比如我在服务器发布了项目wxcrawler

要使用外置配置文件就很简单了,在jar所在目录新建config文件夹,然后放入配置文件,或者直接放配置文件在jar目录


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
springboot使用文件流下载
springboot使用文件流下载
143 0
|
2月前
|
Java Scala Kotlin
SpringBoot 读取配置的几种方式
本文介绍了SpringBoot中读取配置文件的几种方法,包括使用`@Value`、`Environment`和`@ConfigurationProperties`注解,以及如何通过`@PropertySource`指定配置文件位置和编码。还讲解了如何自定义工厂类以支持读取`.yaml`文件。
|
5月前
|
Java 数据格式
SpringBoot 读取 yml 配置的几种方式
SpringBoot 读取 yml 配置的几种方式
287 0
|
7月前
|
Java
SpringBoot读取配置文件内容,获取数据
SpringBoot读取配置文件内容,获取数据
|
Java 数据格式 容器
如何读懂 SpringBoot 配置文件
如何读懂 SpringBoot 配置文件
91 0
springboot 各种文件下载方式(最全)
springboot 各种文件下载方式(最全)
3616 0
|
Java 测试技术 Maven
SpringBoot 实战:加载和读取资源文件
Resource接口抽象出一种更底层的方式管理资源,可以实现通过统一的方式处理各类文件资源。下面是几种获取资源实例的方法。
1078 0
SpringBoot 实战:加载和读取资源文件
|
Java Spring
Springboot读取配置
Springboot读取配置
92 0
|
存储 Java 开发者
读取 Springboot 的配置
读取 Springboot 的配置方式
81 0
|
Java Maven Spring
springboot配置不同环境读取不同文件
以下是本人暂时了解的知识,写出来用于笔记同时方便大家使用。如有问题之处,欢迎朋友指正。
212 0
springboot配置不同环境读取不同文件