Gradle 导出属性不适用于 Spring 中的 gradle bootRun

Posted

技术标签:

【中文标题】Gradle 导出属性不适用于 Spring 中的 gradle bootRun【英文标题】:Gradle exported properties dont work with gradle bootRun in Spring 【发布时间】:2017-02-06 20:13:51 【问题描述】:

在我的 Spring Boot 项目中,我在 gradle 中有以下片段,它将 gradle 属性导出到 Spring Environment。

processResources 
    filesMatching("**/application.properties") 
        expand(project.properties)
     

我的 application.properties 看起来像这样 (sn-p)

app.version=$jar.version

效果很好。我可以使用 @value 在 Spring 类中使用 gradle 属性,甚至可以使用

在 thymeleaf 中访问它们

th:text="$@environment.getProperty('app.version')

但现在的问题是:当我使用“gradle bootRun”运行同一个项目时。我得到了这个:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'jar.version' in string value "$jar.version"
        at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE]

我认为它与 gradle 的 bootRun 工作方式有关,不使用 processResources 或类似的东西?

问题是:我怎样才能让它工作。我不想放弃使用 bootRun。

【问题讨论】:

刚刚看到它在这里解释了 github.com/spring-projects/spring-boot/issues/1739 ,但看不到我的问题的任何解决方案。我不介意这些值是否显示在 bootRun 中,但我的应用程序至少应该运行。 【参考方案1】:

指定一个在无法找到真实值时使用的默认值?

@Value("$...:defaultValue")

【讨论】:

这对于 java 类中的 $Value 没问题,但不能解决我的问题 th:text="$@environment.getProperty('app.version') 但我可以解决这个问题。谢谢.

以上是关于Gradle 导出属性不适用于 Spring 中的 gradle bootRun的主要内容,如果未能解决你的问题,请参考以下文章

@JsonCreator 不适用于 Spring MVC 中的 @RequestParams

Thymeleaf 3 URL 解析不适​​用于 Spring Boot 4 + Spring Security

Spring Boot 测试不适用于 Java 11

带有 Spring Boot 的 Spring MVC 不适用于 Eclipse 的 Tomcat 服务器

用于 Spring Boot 中测试的 Gradle 命令行参数

Spring MVC 表单验证不适用于嵌套的复杂类型