是否可以从外部 Maven 依赖项在 Spring Java 项目中导入占位符值 (@Value)?
Posted
技术标签:
【中文标题】是否可以从外部 Maven 依赖项在 Spring Java 项目中导入占位符值 (@Value)?【英文标题】:Is it Possible to Import Placeholder Values (@Value) in a Spring Java Project From an External Maven Dependency? 【发布时间】:2022-01-22 08:03:50 【问题描述】:目前我正在设计一个供其他应用程序使用的库。该库是使用 Spring Framework 在 Java 之上和 Maven 构建的,并且假设使用的应用程序是相同的(使用 Spring Framework 和 Maven 的 Java 应用程序)。我已经得到了这个库,你可以简单地将依赖项放在你的 Maven pom.xml 文件中。
我正在构建一个演示应用程序来测试它。在演示应用程序上,使用 @SpringBootApplication
,它在主应用程序类(使用 java main 方法)上包含 @EnableAutoConfiguration
,我已经能够从该 Maven 依赖项中自动导入 bean。这需要我进入库的 @Configuration
文件并将 @ConditionalOnMissingBean
添加到我定义的所有 bean 中,但它使自动配置正常工作。
问题:这些 bean 依赖于在同一个 @Configuration
文件中用 @Value
注释的变量。在尝试构建演示应用程序时,我收到如下错误消息:
Could not resolve placeholder 'proxyServerHost' in value "$proxyServerHost"
库的配置文件中对应的代码如下:
@Configuration
@RefreshScope
@EnableRetry
public class ApplicationConfig
@Value("$proxyServerHost")
private String proxyServerHost;
. . .
我尝试将限定符从私有更改为公共,但无济于事。但是在库的 application.yml 文件中(嵌套在 src/main/resources 下)我有一个相应的条目,如下所示:
proxyServerHost: myproxy.org
(现在补值)
在演示应用程序中,这些值没有在任何地方定义。演示应用程序目前甚至没有专门的 @Configuration
类,如果可能的话,我想保持这种方式以最大限度地简化。我希望有某种方法可以自动将这些默认值导入演示应用程序?我正在努力使这个库尽可能易于使用,这是这项工作的一部分。如果不可能,那我只想知道,在我要求我的库的用户自己定义这些值之前。不幸的是,在 *** 上进行广泛的谷歌搜索和搜索对我没有任何有用的结果。
【问题讨论】:
也许在你的库中设置一个默认值?@Value("$proxyServerHost:default_value")
@DirkDeyne 哇,现在我因为没有意识到这一点而感到愚蠢。是的,做到了!
【参考方案1】:
为确保此问题有答案,请参阅上面 Dirk Deyne 的评论。我只需要像这样在我的库中设置一个默认值:
@Value("$proxyServerHost:default_value")
再次感谢 Dirk Deyne!这样就解决了。
【讨论】:
以上是关于是否可以从外部 Maven 依赖项在 Spring Java 项目中导入占位符值 (@Value)?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将Spring Data Couchbase映射到外部文档(来自依赖)?
Spring Cloud sleuth 依赖项在 Spring Boot 堆栈应用程序中抛出 RibbonLoadBalancerClientException