spring-boot - 将 Gradle 属性注入 Spring Boot application.yml,在 IntelliJ IDEA 中不起作用
问题描述
我设法将 Gradle proj.ver 注入到 application.yml 中,然后将其注入到服务应用程序中。我的application.yml看起来像这样:
project:
version: ${version}
但它只有在我从 cli 启动应用程序时才有效:
gradle bootRun
如果我试图从IntelliJ启动应用程序,它不起作用并且失败:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'version' in value "${version}"
我阅读了 Stackoverflow 的所有答案,他们提出了两种解决方案:
使用弹簧型材
修改运行配置并在启动 gradle 任务前运行:processResources
当我从 IntelliJ 运行时,我更喜欢 proj.ver 的默认值。那可能吗?或者对于这种情况有更好的解决方案吗?
谢谢
解决方案
正如 M. Deinum 在上面的评论中所说,我设法从 IntelliJ 运行该应用程序,但现在gradle bootRun
开始失败:
引起:groovy.lang.MissingPropertyException:没有这样的属性:类未知:SimpleTemplateScript2
经过更多研究后,它似乎${version?:unknown}
(带有问号)可以在 IDE 或 cli 中工作。
我已经更新了响应,以便其他人知道如何将 Gradle 构建信息注入 Spring-boot:
1) 告诉 Gradle 将构建数据传递给 Spring yml 文件,如下所示:
processResources {
filesMatching('appInfo.yml') {
expand(project.properties)
}}
2) appInfo.yml 看起来像:
project:
version: ${version?:unknown}
3) 将构建版本注入 Spring 服务,例如:
@Value("${project.version}")
private String applicationVersion;
推荐阅读
- javascript - 如何将html标签保存为数组?
- wpf - WPF DataGridTextColumn 绑定关系表数据(WPF/EF/PRISM)
- python - 处理networkx中的时间戳
- powershell - VS Code 上的 [pwsh] 和 [Powershell Integrated Console] 有什么区别?
- javascript - 使用条件从js中的数组中删除重复项
- django - 动态 USERNAME_FIELD djangorestframework 和 simplejwt
- javascript - MultiValueDictKeyError - Django
- php - codeigniter-4 中的分页自定义 url
- python - 在 Python 中使用 Selenium 搜索不区分大小写文本的最佳方法是什么?
- c# - 如果我向 AddControllersWithViews() 添加扩展名,它是否也适用于 AddRazorPages()