是否可以从外部 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

maven相关问题:maven中依赖的范围

spring boot应用程序作为maven依赖项[重复]

包括外部 jar 依赖项 spring boot 测试

如何为maven项目添加依赖? (如何从外部 jar 文件中找出 GroupID / ArtifactID)[重复]