SpringBoot(2)项目配置

文章目录

  • 一、properties配置文件
  • 二、yml配置文件
    • 基本格式要求
    • [1]普通数据类型
    • [2]配置对象类型数据
    • [3]配置数组类型
  • 三、配置文件存放位置
    • 当前项目根目录中
    • 当前项目根目录下的一个/config子目录中
    • 项目的resources即classpath根路径中
    • 项目的resources即classpath根路径下的/config目录中
  • 四、配置文件存放读取优先级
    • a)当前项目根目录下的一个/config子目录中(最高)
    • b)当前项目根目录中(其次)
    • c)项目的resources即classpath根路径下的/config目录中(一般)
    • d)项目的resources即classpath根路径中(最后)
  • 五、bootstrap配置文件
    • bootstrap配置文件特征
    • bootstrap与 application 的应用场景
  • 六、自定义配置
    • 在资源文件夹下自定义文件:test.properties
    • 创建一个对应的实体类
    • 3)在controller注入实体类对象
  • 七、多环境配置
  • 测试:


一、properties配置文件

SpringBoot默认读取项目下名字为application开头的 yml yaml properties配置文件
SpringBoot(2)项目配置_第1张图片
在项目下的application.properties里修改端口号和项目上下文路径
SpringBoot(2)项目配置_第2张图片

注意,这里的每一个. 都代表一个层级
此时接口的访问路径为:http://127.0.0.1:8081/springboot1/test/getTest

SpringBoot常见配置
查看官网文档https://docs.spring.io/spring-boot/docs/2.7.10/reference/html/application-properties.html#appendix.application-properties.server
SpringBoot(2)项目配置_第3张图片

二、yml配置文件

注意,application.properties里的每一个. 都代表一个层级 转换成yml之后,使用缩进代表层级关系

基本格式要求

① 大小写敏感
② 使用缩进代表层级关系
③ 相同的部分只出现一次
④ 注意空格
SpringBoot(2)项目配置_第4张图片

[1]普通数据类型

server:
  port: 8081

[2]配置对象类型数据

student:
  name: zhangsan
  age: 18
  address: beijing
  #或者写成json格式
animal:
  {name: monkey,age: 3 }

[3]配置数组类型

city:
  - beijing
  - tianjin
  - shanghai
  - chongqing
#或者
city2: [beijing,tianjin,shanghai,chongqing]

如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。

三、配置文件存放位置

当前项目根目录中

SpringBoot(2)项目配置_第5张图片

当前项目根目录下的一个/config子目录中

SpringBoot(2)项目配置_第6张图片

项目的resources即classpath根路径中

SpringBoot(2)项目配置_第7张图片

项目的resources即classpath根路径下的/config目录中

SpringBoot(2)项目配置_第8张图片

四、配置文件存放读取优先级

a)当前项目根目录下的一个/config子目录中(最高)

config/application.properties
config/application.yml

b)当前项目根目录中(其次)

application.properties
application.yml

c)项目的resources即classpath根路径下的/config目录中(一般)

resources/config/application.properties
resources/config/application.yml

d)项目的resources即classpath根路径中(最后)

resources/application.properties
resources/application.yml

五、bootstrap配置文件

Spring Boot 中有两种上下文对象,一种是 bootstrap, 另外一种是 application(ServletContext), bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

bootstrap配置文件特征

①boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载。
②boostrap 里面的属性不能被覆盖。

bootstrap与 application 的应用场景

application 配置文件主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
①使用 SpringCloudConfig 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
②一些固定的不能被覆盖的属性。
③一些加密/解密的场景。

六、自定义配置

在资源文件夹下自定义文件:test.properties

user.a.name=zhangssan
user.a.age=18
user.a.address=beijingshichangpingqu11

创建一个对应的实体类

package com.buba.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * @author qlx
 */
@Data
@Component
@PropertySource(value = "classpath:test.properties")
@ConfigurationProperties(prefix = "user.a")
public class User {
    private String name;
    private Integer age;
    private String address;
}

3)在controller注入实体类对象

    @Autowired
    private User user;

    @GetMapping("/selectNameAll")
    public String selectNameAll() {
        return user.getName();
    }

七、多环境配置

在开发 SpringBoot项目的时候,可能有这样的情况,一套程序需要在不同的环境中发布,数据库配置、端口配置或者其他配置各不相同,如果每次都需要修改为对应环境配置,不仅耗费人力,而且特别容易出现错误,造成不必要的麻烦。
通常情况下,我们可以配置多个配置文件,在不同的情况下进行替换。而在 Spring Boot项目
中,我们新建几个配置文件,文件名以application-{name}.properties的格式,其中的{name}对应环境标识,比如:

  • application-dev.properties:开发环境。
  • application-test.properties:测试环境。
  • application-prod.properties:生产环境。

然后,可以在主配置文件(applicationproperties)中配置spring.profiles.active来设置当前要使用的配置文件。
比如,在主配置文件中配置本次指定使用的配置文件后缀,配置内容如代码清单所示。

spring:
  profiles:
    active: dev

测试:

在工程的资源文件夹下创建一下四个文件

  • application.yml:主配置文件。
spring:
  profiles:
    active: dev
  • application-dev.yml:开发环境。
server:
  port: 8081
  • application-test.yml:测试环境。
server:
  port: 8082
  • application-prod.yml:生产环境。
server:
  port: 8083

启动后观察控制台日志打印当前工程的实际端口号

你可能感兴趣的:(spring,boot,java,spring)