gpt4 book ai didi

java - 我正在使用 @PropertySource 和 @ConfigurationProperties 的组合,但我想用外部属性文件覆盖它们

转载 作者:行者123 更新时间:2023-11-29 06:28:03 26 4
gpt4 key购买 nike

我已经构建了一个 spring boot 项目。

在其中,我有一个如下所示的属性类:

@Configuration
@PropertySource(value = "classpath:abc.properties")
@ConfigurationProperties
public class ABCProperties {

private Map<String, String> someUrls;

@Bean
public Map<String, String> someUrls() {
return someUrls;
}

public Map<String, String> getSomeUrls() {
return someUrls;
}

public void setSomeUrls(Map<String, String> someUrls) {
this.someUrls = someUrls;
}
}

abc.properties 文件的内容如下所示:

someUrls.urlA=someURL
someUrls.urlB=someOtherURL

在项目的资源文件夹(和测试资源文件夹)中,我提供了一个 abc.properties 文件。构建并运行后,程序可以按预期访问 abc.properties 文件中的属性(也可以在测试中正确访问)——它们很好地映射到我的 url 映射。

到目前为止一切顺利。

但是,我在属性类中引用的 URL 并不总是相同的。在某些部署中,我想覆盖它们。使用我的 application.properties 文件中指定的属性,这很容易;只需将另一个外部 application.properties 文件放在我运行应用程序的同一(根)文件夹中,就会自动覆盖我放入其中的所有属性。

有时我想做的是将一个外部 abc.properties 文件放在应用程序的根文件夹中,并让它以相同的方式覆盖 abc.properties 属性。当然,我试过了,但是 内置到 jar 中的 abc.properties 文件的属性被保留,而不是被覆盖。事实上,我不确定 spring boot 程序是否识别出它的根文件夹中还有另一个外部 abc.properties 文件。

关于如何在没有成功的情况下实现这一目标,我似乎没完没了地阅读。我也尝试在我的 application.properties 中指定以下内容,但没有任何区别(即使它确实有效,它也不是理想的,因为我不想在所有情况下都指定直接路径)。

spring.config.location=/path/to/application/root/
spring.config.name=abc.properties

如果我不得不猜测,问题是在我指向“类路径:..”的属性类中,而外部文件实际上并不在类路径中,因为它是......很好的外部。

但是 spring boot 知道如何在其根应用程序文件夹中查找覆盖的 application.properties 所以我希望它也能够查找其他属性文件来覆盖?我只是无法理解如何实现这一目标。

是的,我特别希望我的属性在此 abc.properties 文件中而不是在应用程序属性中。

最佳答案

你看过PropertySources了吗? ?

@PropertySources({
@PropertySource("classpath:abc.properties"),
@PropertySource(value="file:abc.properties", ignoreResourceNotFound=true)
})

来自他们的文档:

In cases where a given property key exists in more than one .properties file, the last @PropertySource annotation processed will 'win' and override.

基本上你在这里说的是:从类路径加载 abc.properties,但也从这个外部位置加载 abc.properties,如果找不到它就忽略后者。它应该覆盖您在外部文件中声明的属性。

还没有测试过,所以希望它能成功。

关于java - 我正在使用 @PropertySource 和 @ConfigurationProperties 的组合,但我想用外部属性文件覆盖它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com