教你如何使用 SpringBoot 的配置文件

3552 篇文章 115 订阅

1.配置文件的作用

1.1 什么是配置文件?

  Spring Boot 配置文件是一种用于配置 Spring Boot 应用程序的外部化配置方式,可以通过在应用程序中使用不同的配置文件来控制应用程序的行为,而无需在代码中进行硬编码。

  它的作用:

  • 数据库的连接信息(包含⽤户名和密码的设置);
  • 项⽬的启动端⼝;
  • 第三⽅系统的调⽤秘钥等信息;
  • ⽤于发现和定位问题的普通⽇志和异常⽇志等。

2. 配置文件的格式

   SpringBoot 项目的创建与使用 - 掘金 (juejin.cn)

  在我们用 IDEA 创建了一个 SpringBoot 项目后👆,会默认地为我们创建一个.properties格式的配置文件:

  Spring Boot 支持多种配置文件格式,例如:

  • Properties 格式文件:.properties 文件是键值对的集合,适合用于简单的配置。
  • YAML 格式文件:.yml 文件采用缩进的方式表示层次结构,适合用于复杂的配置。

(它们的语法后文介绍)

  .properties配置文件与.yml配置文件可以同时存在在同一个项目中;但是.properties配置文件的优先级更高,比如:.properties配置文件、.yml配置文件都配置了端口server.port,那么这时以 .properties 中的配置为主,加载完.properties 后,然后再加载yml的其它配置。

3. properties 配置文件

3.1 properties 配置文件的基本语法

3.1.1 系统配置项

  properties 是以键值的形式配置的,keyvalue 之间是以“=”连接的,下面是配置程序的端口号(默认端口号是8080):

# 配置项目的端口号
server.port=9090
复制代码

  像server.port这样的字段是属性,属性是官方定好了的,属性文档:常见应用程序属性 (spring.io)

  我们创建一个类,来测试配置是否成功:

@Controller
@ResponseBody //表示可以返回非静态页面的内容
public class TestController {
    @RequestMapping("/hi")//路径
    public String hi(){
        return "Hello World";
    }
}
复制代码

  程序运行后,可以看到端口号已经修改成功了,我们浏览器打开http://localhost:9090/hi看有没有输出。

  

3.1.2 自定义配置项

  配置文件中可以自定义配置,也就是官方文档中没有的属性:

# 配置项目的端口号
server.port=9090

#用户自定义配置项
hi=hello
test.hi=test_hello //可以加 . 
复制代码

3.2 properties 配置文件乱码问题

  上面的配置文件中加了中文注释:

  如果你没有换字符集,重启IDEA后可能会乱码,解决方法:

  1. 设置里面搜索,然后换UTF-8

  1. 第二个设置相同的操作:

 看下面的位置有没有 UTF-8,有的话就成功了。

  1. 删除当前的配置文件,重新创建。

3.3 读取 properties 配置文件的内容

  读取 properties 配置文件是可以读取其中的所有内容,不管是系统的还是自定义的,格式如下:

    @Value("${属性名}") //取出来的是它的值
    public/private...  类型 变量;
复制代码

  

  如果加了层级,这里也要跟着加:

  

4. yml 配置文件

4.1 为什么会有 yml 配置文件?

  • yml 是⼀个可读性高,写法简单、易于理解,它的语法和 JSON 语⾔类似。 
  • yml 支持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。
  • 它使⽤空白符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
  • yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、JavaScript、Perl中。

4.2 yml 的基本语法

  1. 注释:以 # 开头的行表示注释,整行都会被忽略。
  2. 键值对:以键值对的形式表示数据,使用冒号(:)分隔键和值。
key: value #要加空格
复制代码
  1. 映射:使用缩进来表示映射中的数据结构,可以嵌套多层。
parent:
  child1:
    key1: value1     #相当于properties中的:parent.child1.key1=value1
    key2: value2
复制代码

  我们先创建一个 yml 配置文件(把application.properties给注释掉,容易冲突)。

  在 yml 中配置端口号:

# 配置端口号
server:
  port: 8888  # 8888前一定要加空格!!!
复制代码

改一下前面的代码,并运行:

修改端口成功:

来看看分别用 properties yml 来连接数据库的伪代码:

yml:

# 数据库连接配置 
spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
    username: myuser
    password: mypass
复制代码

properties:

# 数据库连接配置 
spring.datasource.url=jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
spring.datasource.username=myuser 
spring.datasource.password=mypass
复制代码

  可以看到 ymlproperties 更简洁。

4.3 yml 配置不同数据类型

# 字符传类型
mystr1: hello \n world    # 原样输出
mystr2: 'hello \n world'  # 原样输出
mystr3: "hello \n world"  # 中间会换行
# 布尔值
boolean.value1: true
boolean.value2: false

# 整数
int.value: 100
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制

# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法

# Null,~代表null
null.value: ~
复制代码

4.3 读取 yml 配置内容

  读取方法与读取 properties 配置文件的一样:

4.4 在 yml 中配置对象

  

# 配置一个对象
student:
  id: 1
  name: zhangsan
  age: 20
# 也可以这么写
student1: {id: 2,name: lishi,age: 20}
复制代码

4.4.1 读取配置文件中的对象

  1. 创建一个类,其属性与配置文件中的属性一一对应,并且完善其get、set方法。
  2. 给这个类加上类注解
  3. 加一个@ConfigurationProperties("配置文件中对象的名称")

  1. 注入到变量中

结果:

4.5 在 yml 配置 List 集合

  方法与上面一样

# 配置一个集合
listtypes:
  list:  # 集合名
    - str1 # 元素 下同
    - str2
    - str3
    - str4
复制代码

结果:

5. 设置不同环境的配置⽂件

  一般在公司中,要求有多个不同的配置文件,比如:

  • 主配置文件:application.yml
  • 开发环境的配置文件: application-dev.yml
  • 测试环境的配置文件: application-test.yml
  • 生产环境的配置文件: application-prod.yml

(application-xxx.yml xxx 位置可以改变)

假如开发环境端口为:8081

测试环境端口为:9090

生产环境端口为:9111

每个配置文件写自己的配置,如果要切换那么就对主配置文件进行修改:

# 任意更换环境
spring:
  profiles:
    active: test # 这里的值对应文件后缀,此时为测试环境的配置 端口为 9090
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值