gpt4 book ai didi

Spring Boot : Override convention used to find application. 属性配置文件

转载 作者:行者123 更新时间:2023-12-01 02:10:24 27 4
gpt4 key购买 nike

我正在查看位于 here 的 spring-boot 文档。

特别是关于考虑属性的顺序的部分:

进一步来说:

打包在 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)

首先让我提一下,使用这种方法加载特定于配置文件的配置没有任何问题(前提是文件位于 classpath:/或 classpath:/config.php 中)。

但是,我希望做的是实现如下约定:

classpath:/default/application.properties
classpath:/{profile}/application.properties

此外,我想在不使用 spring.config.location 的情况下实现此配置。属性(property)。我对 Spring Boot 很陌生,所以我正在寻找一些关于如何实现这个约定的提示。根据我的研究,这似乎可以通过添加自定义 ConfigFileApplicationListener 来实现。请让我知道这是否是一个明智的起点或任何其他可能更好的想法。

更新:
看来,如果我可以以编程方式构建 spring.config.location我可以在诸如 classpath:/default、classpath:{profile} 等位置传递的属性列表。基于 spring.profiles.active 环境变量。下面的 ConfigFileApplicationListener 似乎是我想要调用的那个:
public void setSearchLocations(String locations)

但是,我不确定我会在生命周期的哪个位置进行这样的调用。

最佳答案

所以这就是我设法想出的,不确定我是否会采用这个解决方案,但我想我会提供它,以防有任何有用的反馈。

所以我尝试在 ConfigFileApplicationListener 上设置调用 setSearchLocations(String Locations) 方法。在它被添加到 SpringApplication 之后但在它被触发之前。我通过添加一个也实现 Ordered 的新监听器来做到这一点,并确保它在 ConfigFileApplicationListener 之前运行.这似乎是我想要的,但我仍然认为有一种更优雅的方法。我特别不喜欢必须遍历监听器。

public class LocationsSettingConfigFileApplicationListener implements
ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered {

/**
* this should run before ConfigFileApplicationListener so it can set its
* state accordingly
*/
@Override
public int getOrder() {
return ConfigFileApplicationListener.DEFAULT_ORDER - 1;
}

@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {

SpringApplication app = event.getSpringApplication();
ConfigurableEnvironment env = event.getEnvironment();

for (ApplicationListener<?> listener : app.getListeners()) {

if (listener instanceof ConfigFileApplicationListener) {
ConfigFileApplicationListener cfal = (ConfigFileApplicationListener) listener;
//getSearchLocations omitted
cfal.setSearchLocations(getSearchLocations(env));
}
}

}

关于Spring Boot : Override convention used to find application. 属性配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29897802/

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