Spring Boot 的配置文件可以通过 ${} 或 @@ 语法引用属性变量。这两种语法虽然看起来非常相似,但实际上有一些区别。
使用 ${} 引用属性变量
语法说明
${} 语法用于引用配置文件中的属性变量。在配置文件中可以定义一个属性,然后在其他地方通过 ${} 语法来引用该属性。语法格式如下:
${属性键名:默认值}
其中,属性键名是属性的名称,可以使用 . 分隔符来表示嵌套的属性。默认值是在找不到指定属性时使用的值。如果省略默认值,那么默认值为 null。
示例说明
假设定义了一个名为 com.example.log.name
的属性,在 application.yml
配置文件中可以这样使用:
server:
port: ${PORT:8080}
com:
example:
log:
name: mylogger
在这个例子中,我们引用了一个名为 PORT
的属性,如果该属性没有定义,那么默认值就是 8080。另外,我们定义了一个名为 com.example.log.name
的属性,它的值是 mylogger
。
特殊用法
还有一种特殊的用法,可以通过 ${random} 语法来生成随机数。如下所示:
myapp:
password: ${random.value}
在这个例子中,属性 myapp.password
将会被设置为一个随机的字符串。
使用 @@ 引用属性变量
语法说明
@@ 语法用于引用环境变量或系统属性。环境变量和系统属性都是可以在系统中动态设置的值,因此可以在 Spring Boot 应用程序中方便地引用和使用。
@@ 语法的语法格式如下:
@@{属性名称:默认值}
其中,属性名称用于指定要引用的环境变量名称或系统属性名称。如果找不到指定的值,则使用默认值。如果省略默认值,则使用 null。
示例说明
假设我们在操作系统中设置了一个环境变量 MYAPP_SECRET
,它的值是 123456
。在 application.yml
配置文件中可以这样使用 @@语法:
myapp:
secret: @@{MYAPP_SECRET:default}
现在,属性 myapp.secret
的值将会被设置为 123456
。如果环境变量 MYAPP_SECRET
没有设置,那么值将会是 default
。
区别说明
在使用 ${} 语法时,属性值可以在配置文件中定义,它只能引用 Spring Boot 配置文件中的属性变量,而无法引用系统环境变量或系统属性。使用 @@ 语法时,它可以引用系统环境变量和系统属性,但它不能直接引用配置文件中的属性变量。
因此,在实际使用中,我们需要根据具体情况选择适当的语法来引用属性变量。
例如,如果要使用系统环境变量和系统属性,那么应该使用 @@ 语法,如果要使用配置文件中的属性变量,那么应该使用 ${} 语法。
另外,有时候为了方便操作,也可以将系统环境变量或系统属性的值设置成配置文件中的属性值,这样就可以通过 ${} 语法来引用它们了。
例如,我们可以设置一个系统属性 myapp.secret
,它的值是 ${secret}
,其中 secret
是在应用程序的配置文件中定义的。然后,在应用程序中可以使用 ${} 语法来引用这个系统属性,就可以达到引用配置文件中的属性变量的效果了。
示例代码如下:
java -Dmyapp.secret=${secret} -jar myapp.jar
myapp:
secret: mysecret
在这个例子中,我们将系统属性 myapp.secret
设置为 ${secret}
,其中 secret
是在配置文件中定义的。然后,我们在配置文件中引用 myapp.secret
属性,实现了从配置文件中引用属性的目的。
总之,${} 和 @@ 语法都是用于引用属性变量的语法,我们需要根据策略选择适当的语法来使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot配置文件属性变量引用方式${}和@@用法及区别说明 - Python技术站