${}和@@都是springboot引用属性变量的方式,具体区别与用法:
1、${}常用于pom.xml,和 src/main/resources/application.properties等默认配置文件的属性变量引用。
语法为:field_name=${field_value}
pom.xml示例:
<properties>
<dubbo.version>2.7.0</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
</dependencies>
application.properties示例:
logback日志配置
log.config.address=classpath:config/logback-spring.xml
logging.config=${log.config.address}
2、@@ 方式常用于引用springboot非默认配置文件(即其他配置文件)中的变量,是springboot为替代${}属性
占位符产生,原因是${}
会被maven处理,所以引用非默认配置文件时起不到引用变量的作用。
语法为:
field_name=@field_value@
示例:在实际项目开发中,为了在不同环境进行测试,我们会在src/main/resources目录下创建config文件夹,并在config中创建多个properties文件,例如:local.properties, development.properties, production.properties
,当我们在src/main/resources/application.properties
文件中引用src/main/resources/config/local.properties
的属性变量时,就要使用@@方式
端口配置
server.port=@server.port.web@
logback日志配置
logging.config=@logging.config@
$ {@@}和${@}都是用来引用属性的格式,但是它们的含义略有不同。
${@}格式通常用于在Java代码中设置属性的默认值,如果属性在配置文件中存在,则会覆盖默认值。如果属性在配置文件中不存在,则会使用默认值。
${@@}格式通常用于在Java代码中设置属性的默认值,并且在配置文件中存在相同属性时不会覆盖默认值,即配置文件中的属性会优先于默认值。
综上所述,$ {@}和$ {@@}的主要区别在于是否优先使用配置文件中的属性值。具体使用哪种格式,取决于实际需求和代码逻辑。如果您需要设置默认值并确保配置文件中的属性不会覆盖默认值,则可以使用$ {@@}格式。否则,可以使用${@}格式。