专栏首页SpringBoot 核心技术SpringBoot2.x基础篇:配置文件中占位符的使用

SpringBoot2.x基础篇:配置文件中占位符的使用

知识改变命运,撸码使我快乐,2020继续游走在开源界 点

概念

占位符是一种灵活的配置方式,可以让我们很灵活的使用配置参数,@Value注解的配置也是占位符的一种体现方式,这种方式可以从Environment内获取对应的配置值

推荐阅读

配置方式

application.yml/properties配置文件内可以直接使用占位符来进行配置的相互引用,如下所示:

system:
  name: ${spring.application.name}
spring:
  application:
    name: project-sample

在上面的配置中,name配置直接引用了spring.application.name的配置值,这样我们在系统中通过@Value("${name}")或者通过@ConfigurationProperties方式使用时,得到的值都为project-sample

// @Value方式
@Value("${system.name}")
private String name;

// @ConfigurationProperties方式
@Configuration
@ConfigurationProperties(prefix = "system")
static class LoadConfig {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

这样方式极大地减少了相同的配置出现,让我们在配置文件中也可以实现类似于常量的定义。

使用默认值

当我们使用@Value注解来注入配置参数时,如果所引入的配置为NULL,启动项目时会抛出异常,项目无法正常启动,所以我们有必要添加一个默认值,如下所示:

system:
  name: ${spring.application.name:default}
#spring:
#  application:
#    name: project-sample

在上面配置中把spring.application.name注释掉,当我们使用${spring.application.name}占位符时其实并未引用到有效的值,通过${xxx:defaultValue}的形式可以配置默认值,当占位符所引用的配置为NULL时,将会使用默认值(默认值的类型要对配置匹配)。

也可以通过@Value("${system.name:default}")这种方式配置默认值,不建议使用这种方式,默认值有变动时,我们还要一个一个修改,太麻烦了,不要给自己找事干...

当然对于配置的注入还是推荐使用@ConfigurationProperties,完全遵循OOP设计方式,在应用程序启动时进行赋值,就算是引用的配置为NULL没有默认值,也不会出现启动异常的问题。

“短”命令行参数

如果你对命令行参数不熟悉,可以访问 SpringBoot2.x基础篇:灵活的使用外部化配置信息 学习。

在实际部署应用程序时,有很多的配置是动态的,命令行参数是一个不错的方式,不过SpringBoot所提供的配置参数名称都比较长,对此我们完全可以利用占位符配置方式实现自定义。

占位符是从Environment内读取对应的配置值,而命令行参数在应用程序启动时会被一并加入到Environment中,因此也就实现了占位符动态配置,其实这个“短”的含义,是你定义的新的配置名称比较短而已。

假设我们的端口号需要动态指定,配置文件中可以通过如下的方式配置:

server:
  port: ${port:8080}

port是我们定义的“短”占位符,在应用程序启动时并未指定则使用默认值8080

java -jar project-sample.jar --port=9090

通过--port=9090命令行参数,应用程序启动时端口号就变为了9090

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot2.x基础篇:灵活的使用外部化配置信息

    SpringBoot提供了内部配置application.yml文件的方式来进行全局配置,还支持使用profiles来激活不同环境下使用不同的配置文件,而这种方...

    恒宇少年
  • 第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer两种配置方式了吗?

    恒宇少年
  • 第五十二章:基于SpringBoot2使用Rest访问MongoDB数据

    恒宇少年
  • Springboot读取配置文件、pom文件及自定义配置文件

    前言 很多人都知道读取配置文件,这是初级做法,上升一点难度是使用java bean的方式读取自定义配置文件,但是大家很少有知道读取pom文件信息,接下来我都会讲...

    胖虎
  • 如何共享打印机?

    然后局域网中的其他用户,就能通过点开设备和打印机,然后点击添加打印机,添加网络打印机(WIN7),WIN10点了添加打印机就会自动搜索网络打印机了。

    简单并不简单
  • jenkins使用pipeline结合maven,sonar,docker,k8s实现构建和回滚

    企业微信机器人接口文档:机器人 执行该脚本只需传入两个参数即可,一个是sonar检测的项目的项目名,另一个是要发的邮件地址

    dogfei
  • SpringCloud Config 配置中心数据库不限制存储后端解决方案

           今天公司让做一个配置中心,可以在redis上作为SpringCloud 配置中心后端,本人是springcloud的菜鸟,但是很懵逼,但还是硬着头...

    张泽旭
  • spring的spel 转

     Spring 3.0 创建了一种新的方式用以配置对象的注入(set注入或者构造参数注入),它便是SpEL (Spring Expression Languag...

    尚浩宇
  • Envoy 入门简单示例

    Envoy 使用 YAML 配置文件来控制代理的行为。在下面的步骤中,我们将使用静态配置接口来构建配置,也意味着所有设置都是预定义在配置文件中的。此外 Envo...

    CNCF
  • SpringBoot参数传递

    RequiredStringparameter'name'isnotpresent :name参数没有提供

    DataScience

扫码关注云+社区

领取腾讯云代金券