SpringBoot中yml占位符@*@与${*}
前言
在 SpringBoot 项目yml配置中,我们经常会使用两种占位符,它们分别是:
- @*@
- ${*}
代码案例
1 |
|
${*}
使用 @Value 注解注入属性时,只能使用 ${} 占位符解析。
@Value 注解的处理属于 Spring 核心框架逻辑,可以参见 PlaceholderConfigurerSupport
这个类,最终会执行 ${*} 占位符的解析。其中的冒号后面可以写默认值。
1 |
|
maven-resources-plugin
替换资源文件中的占位符变量
对于Maven标准的占位符变量,如${project.groupId},${project.artifactId},${project.version},${project.basedir}等,只要在配置
1 |
|
- 默认占位符有两种,分别是 ${} 和 @@
- 配置项 useDefaultDelimiters,可以控制是否使用默认占位符
- 配置项 delimiter,既可以写默认占位符,也可以自定义占位符
总结
- 默认占位符有两种,分别是 ${ * } 和 @ * @
- 配置项 useDefaultDelimiters,可以控制是否使用默认占位符。如果为 true,则 ${} 和 @@ 这两种占位符始终有效,可以同时使用
- 配置项 delimiter,既可以写默认占位符,也可以自定义占位符,比如上文中的 # * #
注意事项:
- 占位符必须成对使用,如果忘记写右边的,则不会被解析。
- 本文搭建的 Demo 项目,使用了 spring-boot-starter-parent 作为 parent,但有时我们可能不会使用它。此时,maven-resources-plugin 插件需要我们手动引入,道理是一样的。
常见情况:
- 如果项目直接或间接引入 spring-boot-starter-parent 作为 parent,且没有手动配置 maven-resources-plugin 插件。则只能使用 @*@ 这一种占位符,这是在 spring-boot-starter-parent 指定的。
- 如果项目没有引入 spring-boot-starter-parent 作为 parent,手动引入 maven-resources-plugin 插件,但没有指定任何 delimiter,也没有显式配置 useDefaultDelimiters 为 false,那么可以使用默认占位符 @@ 或 ${},因为不配置 useDefaultDelimiters 的话,默认为 true。
参考:聊聊 SpringBoot 中的两种占位符:@@ 和 ${}
SpringBoot中yml占位符@*@与${*}
https://github.com/i-xiaoxin/2023/02/09/SpringBoot中yml占位符@*@与${*}/