Spring Boot 配置文件总结

科技资讯 投稿 5900 0 评论

Spring Boot 配置文件总结

前言

application.properties,这个配置文件的作用就是,允许我们通过这个配置文件去修改 Spring Boot 自动配置的默认值

application.properties 和 application.yml

yml 等同于 yaml,写法看个人喜欢,我喜欢写成 application.yml

不同后缀不同写法

application.properties 和 application.yml,它们的区别在于语法不同,但本质上是一样的。application.properties 使用键值对的方式来配置,而 application.yml 使用缩进和冒号的方式来配置。

properties

key = value,如果有多级配置项,则是 first.second.third = value

key=value
first.second.third=value

示例:

    定义属性:
key=value
game.name=GTA5

这里的 keygame.name 都是属性名称,而 valueGTA5 是属性的

  1. 定义 List:
game.list=GTA5,NBA2K,AC

这里的 game.list 这个列表包含了 3 个元素。

  1. 定义 Map:
game.map.key1=value1
game.map.key2=value2

这里的 game.map 是一个 Map,这个 Map 包含了两个元素,key1 映射到 value1,key2 映射到 value2

  1. 引用已定义的属性:
game.name=GTA5
# 引用上面已定义的属性
great.game=${game.name}

yml (yaml

yml 作为后缀的配置文件,语法是这样的:key: value。使用冒号代替等号,同时冒号后面需要跟上一个空格符,不可省略。

key: value
first:
  second:
    third: value

示例:

    定义属性:
key: value
game:
  name: GTA5
  1. 定义 List:
game:
  list:
    - GTA5
    - NBA2K
    - AC
  1. 定义 Map:
game:
  map:
    key1: value1
    key2: value2
  1. 引用已定义的属性:
game:
  name: GTA5
great:
  game: @{game.name}

不同环境下切换不同的配置文件

一般项目中在不同环境下都有不同的配置,还是以这个 Tomcat 的端口号为例:

开发环境、测试环境、生产环境。在开发环境下,端口号是 4790;测试环境下,端口号是 4791;生产环境下是 4792。

application-dev.yml

server:
  port: 4790
application-test.yml
server:
  port: 4791
application-prod.yml
server:
  port: 4792

spring.profiles.active

现在,通过 spring.profiles.active 这个配置项,在 application.yml 中指定我们想要切换的配置文件,现在指定使用开发环境的配置文件

# 指定使用 application-dev.yml 这个配置文件
spring:
  profiles:
    active: dev

启动 Spring Boot 应用,控制台输出:

2023-03-16 15:41:48.122  INFO 3356 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s: 4790 (http with context path ''

指定使用测试环境下的配置文件

# 指定使用 application-test.yml 这个配置文件
spring:
  profiles:
    active: test

启动 Spring Boot 应用,控制台输出:

2023-03-16 15:42:21.462  INFO 24548 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s: 4791 (http with context path ''

同理,指定使用生产环境的配置文件也是一样的做法。

自定义的配置

配置与代码解耦

server:
  port: 4790

# 自定义的配置
demo:
  author: god23bin
  description: 点个免费的赞,我能开心好久!

上面自定义了两个配置项,分别是 demo.authordemo.description,接着,如何在代码中使用这些配置好的值呢?

    使用 @Value
  • 使用 @ConfigurationProperties

@Value

我们写一个普通的 Java 类,使用 Spring 提供的 @Value 来读取这两个值:

@Data
@Component
public class DemoCustomConfig {

    /**
     * 通过 @Value 注解读取配置文件中的自定义配置项的值,使用 ${} 进行读取
     **/
    @Value("${demo.author}"
    private String author;

    @Value("${demo.description}"
    private String description;

}

上面的代码中,我在类上使用了 @Data@Component@Data 是来自 Lombok 的,用于生成 getter 和 setter 方法,@Component 则将该类的实例对象交给 Spring 管理,接着在该类的两个属性上分别使用了 @Value 注解,通过 ${} 指定了我们要读取的配置项。

@RequestMapping("/demo"
@RestController
public class DemoController {

    @Autowired
    private DemoCustomConfig demoCustomConfig;

    @GetMapping("/getCustomValue"
    public ResponseEntity<String> getCustomValue( {
        return ResponseEntity.ok(demoCustomConfig.getAuthor( + "说:" + demoCustomConfig.getDescription(;
    }
}

访问该接口:localhost:4790/demo/getCustomValue

@ConfigurationProperties

@ConfigurationProperties 注解,它可以将配置文件中的的值绑定到 Java Bean 中,也就是通过这个 Bean 可以读取到配置文件中配置的值,我们看看如何操作。

@Data
@Component
@ConfigurationProperties("system.demo"
public class SystemCustomConfig {

    private String name;

    private String version;

}

上面的代码,主要使用了 @ConfigurationProperties 这个注解,并指定了前缀 system.demo,同时这个类有两个属性,name 和 version,这样就相当于我们自定义了 system.demo.namesystem.demo.version 这两个属性。

server:
  port: 4790

# 自定义的配置
system:
  demo:
    name: 超级系统
    version: 1.0

写完这里的配置项,并不需要使用 @Value 去读取,因为使用了 @ConfigurationProperties 注解,Spring 已经帮我们搞定了配置的值的读取,至于它的实现原理,这里先不深究。

@RequestMapping("/demo"
@RestController
public class DemoController {

    @Autowired
    private SystemCustomConfig systemCustomConfig;

    @GetMapping("/getSystemVersion"
    public ResponseEntity<String> getSystemVersion( {
        return ResponseEntity.ok(systemCustomConfig.getName( + "版本:" + systemCustomConfig.getVersion(;
    }
}

访问该接口:localhost:4790/demo/getSystemVersion

关于自动提示

<!-- 配置文件处理器,配置文件进行绑定就会有提示 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
spring-boot-configuration-processor 是一个用于生成配置元数据的注解处理器。它会扫描使用 @ConfigurationProperties 注解的类和方法,来获取配置参数并生成配置元数据。生成的配置元数据可以用于 IDE 的自动补全和提示功能。

annotaion processing。

关于 Cannot resolve configuration property

Define configuration key xxx 就可以帮我们生成一个关于配置的元数据文件。

additional-spring-configuration-metadata.json:

{
  "properties": [
    {
      "name": "demo.author",
      "type": "java.lang.String",
      "description": "Demo的作者"
    },
    {
      "name": "demo.description",
      "type": "java.lang.String",
      "description": "Demo的描述"
    }
  ]
}

此时,还是一样,重启项目,如果黄色提示还是没有去除的话,这里建议重新用 Maven 进行一次 clean,接着重新编译整个项目,就可以了。于此同时,也具有了自动提示功能。

自定义配置文件

application.properties 这个配置文件。那现在我们想自己写一个配置文件,并且能在应用中读取这个配置文件的信息,该如何做呢?这里就涉及到 @PropertySource 这个注解了。

custom.yml
# 自定义的配置文件
version: 2.0
description: 求关注!

读取该配置文件的配置类:

@Data
@Configuration
@PropertySource("classpath:custom.yml"
public class DemoPropertiesSourceConfig {

    @Value("${version}"
    private String version;

    @Value("${description}"
    private String description;

}

这样,就能读取到自己编写的配置文件的配置信息了。

@PropertySources 注解,可以看到最后面多加了一个 s,说明这个单词是复数,通俗易懂。

@Configuration
@PropertySources({
    @PropertySource("classpath:custom1.yml",
    @PropertySource("classpath:custom2.properties"
}
public class MyConfig {
    // ...
}

总结

    配置文件的两种写法:properties 和 yml

  1. spring.profiles.active 属性来切换使用哪个配置文件。

  2. @Value 或者@ConfigurationProperties 来读取。

  3. @PropertySource 来指定获取该自定义配置文件的信息。

最后的最后

希望各位屏幕前的靓仔靓女们给个三连!你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!

咱们下期再见!

编程笔记 » Spring Boot 配置文件总结

赞同 (32) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽