SpringBoot2.x基础篇:配置文件中占位符的使用_恒宇少年的博客-程序员秘密

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

点赞再看,养成习惯

给我来个Star吧,点击了解下基于SpringBoot的组件化接口服务落地解决方案

概念

占位符是一种灵活的配置方式,可以让我们很灵活的使用配置参数,@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

作者个人 博客
使用开源框架 ApiBoot 助你成为Api接口服务架构师

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42033269/article/details/106956565

智能推荐

weex开发总结2_首展噼里啪啦前端团队的博客-程序员秘密

weex+vue项目使用ts开发接入TypeScript网上关于weex接入TypeScript的文章相当的少,仅存能找到的几篇还都是重复的,按照上面的步骤来做了之后并不能正常运行,关于vue2.0改造ts的文章倒是不少,于是先新建了一个vue2.0项目,尝试改造了ts开发,发现主要是webpack和ts的版本限制比较大,两者版本要对应起来,不然就会出现报错情况。然后简单进行了总结,如以下几点:1、添加ts 环境依赖,根据自己的需要升级相关依赖或者有影响的包,下载ts执行环境需要的依赖。2、生成t

用JavaScript实现tab切换(选项卡)_海阔天空ZMZ的博客-程序员秘密

如图所示当鼠标在顶部菜单栏滑动时下方内容会发生改变注意:本文只以改变红框部分为例<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial...

通过数组方式向Oracle大批量插入数据(10万条11秒)_hq_Tree的博客-程序员秘密

http://www.cnblogs.com/cl1255674805/p/5130393.html1.创建数据库PersonCREATE TABLE Person( id number,name nvarchar2(200) ,age number ,sex nvarchar2(200) ,password nvarchar2(200))2.在数据库建立一个type,对应JAVA端要传

Macbook效率神器 Alfred 4.0.5_RunningDiGua的博客-程序员秘密

Macbook 效率神器 Alfred 4.0.5下载地址:链接:https://pan.baidu.com/s/1ovw_U_LLkAFVCBqPVtCcTQ密码:b27d双击command–最实用:我决定最实用的就俩功能,搜书签 + 自动输入;(尤其自动输入,作为程序员的我,整天连remote db,敲ssh,敲mysql -u -p -h …自动输入拯救fingers~~~)...

elasticsearch优化之分词精确查询match_phrase_codeSeeking的博客-程序员秘密_elasticsearch match_phrase

1 对于已经做了分词的字段,当我们做全文检索时,是那么的灵活和方便,有时候也需要精确匹配,查某个短语。如这样的字段:用ik_max_word 对数据建索引时既可以把词分出来建索引,又可以把字分出来建索引。然后用 ik_smart 将查找短语,因为ik_smart分出的数据是 ik_max_word 的一个子集,如果要查找的短语在原文中有出现,那么一定可以查到,然而却没有找到,比如原文:原文:...

node.js博客项目day01-项目基本配置_weixin_46128398的博客-程序员秘密

node.js博客项目day01-项目基本配置项目简介项目文件结构配置数据库配置路由项目入口文件app.js项目简介该项目是跟随网上黑马node项目的动手实战,主要实现博客发布和博客管理功能,我开个专栏专门记录实战历程和个人的思考。项目文件结构app.js:项目入口文件,做项目一些基本的配置package-lock.json/package.json:nodejs配置文件middleware:主要放一些中间文件model:放置数据库有关的配置文件public:放置静态资源文件route

随便推点

zzulioj 1039: n个数求和_Love 郑亚茹的博客-程序员秘密

题目描述输入一个整数n和n个整数,输出这n个整数的和。输入输入有两行:第一行是一个正整数n,第二行是n个整数。输出输出一个整数,即n个数的和。输出单独占一行。样例输入 Copy37 3 2样例输出 Copy12提示…while:#include<stdio.h>int main(){ int n, x, sum=0; scanf("%d",&n); while(n--) { scanf("%d",&x); sum=sum+x; }

python正则总结(思维导图)_fz420的博客-程序员秘密

建议学习顺序: 1. 学习正则表达式编程语言语法 参考教程: a. <http://www.infoq.com/cn/articles/regular-expressions-introduction-part01> b. <http://www.zjmainstay.cn/my-regexp> c. 《精通正则表达式》_余晟 -视频版学习python正则模块

BZOJ 1816: [Cqoi2010]扑克牌 二分_Top_xiao的博客-程序员秘密

Description你有n种牌,第i种牌的数目为ci。另外有一种特殊的牌:joker,它的数目是m。你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1套牌。比如,当n=3时,一共有4种合法的套牌:{1,2,3}, {J,2,3}, {1,J,3}, {1,2,J}。 给出n, m和ci,你的任务是组成尽量多的套牌。每张牌最多只能用在一副套牌里(可以有...

机器学习:手写数字识别(Hand-written digits recognition)小项目_小威威__的博客-程序员秘密

该项目的所有代码在我的github上,欢迎有兴趣的同学与我探讨研究~地址:Machine-Learning/machine-learning-ex3/1. Introduction手写数字识别(Hand-written digits recognition),顾名思义,就是将带有手写数字的图片输入到已经训练过的机器,且机器能够很快识别图片中的手写数字,并将之作为输出打印出来。实现原理:现以我个人

Pointers_大菜狗的博客-程序员秘密

#include&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;using namespace std;const double * f1(const double * ar, int n);const double * f2(co

Tkinter窗口美化&使用高dpi缩放适配高分屏_qq_25921925的博客-程序员秘密_tkinter自适应分辨率

Tkinter窗口美化&amp;高dpi适配1.让Tkinter小部件具有Windows本地风格from tkinter import *from tkinter.ttk import *ttk中的小部件会覆盖tkinter的小部件效果对比2.解决高分屏下程序界面模糊问题(高DPI适配)import ctypes#告诉操作系统使用程序自身的dpi适配ctypes.windll...