gpt4 book ai didi

spring - 可以通过属性文件设置 Spring 事件配置文件吗?

转载 作者:行者123 更新时间:2023-12-04 15:33:02 24 4
gpt4 key购买 nike

我希望能够从属性文件中读取事件配置文件,以便可以在基于 Spring MVC 的 Web 应用程序中使用不同的配置文件配置不同的环境(dev、prod 等)。我知道可以通过 JVM 参数或系统属性设置事件配置文件。但我想通过属性文件来代替。关键是我不知道静态的事件配置文件,而是想从属性文件中读取它。看起来这是不可能的。例如,如果我在 application.properties 中有 'spring.profiles.active=dev',并允许它在 override.properties 中像这样被覆盖:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:/application.properties</value>
<value>file:/overrides.properties</value>
</list>
</property>
</bean>

未在环境中提取配置文件。我猜这是因为在 bean 初始化之前检查事件配置文件,因此不尊重在属性文件中设置的属性。我看到的唯一其他选项是实现一个 ApplicationContextInitializer,它将按优先级顺序加载这些属性文件(如果存在,则首先覆盖.properties,否则为 application.properties)并在 context.getEnvironment() 中设置值。有没有更好的方法可以从属性文件中做到这一点?

最佳答案

一种解决方案是“手动”读取具有指定配置文件的必要属性文件 - 没有 Spring - 并在上下文初始化时设置配置文件:

1)编写简单的属性加载器:

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Properties;

public class PropertiesLoader
{
private static Properties props;

public static String getActiveProfile()
{
if (props == null)
{
props = initProperties();
}
return props.getProperty("profile");
}

private static Properties initProperties()
{
String propertiesFile = "app.properties";
try (Reader in = new FileReader(propertiesFile))
{
props = new Properties();
props.load(in);
}
catch (IOException e)
{
System.out.println("Error while reading properties file: " + e.getMessage());
return null;
}
return props;
}
}

2) 从属性文件中读取配置文件并在 Spring 容器初始化期间对其进行设置(基于 Java 的配置示例):
public static void main(String[] args)
{
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles(PropertiesLoader.getActiveProfile());
ctx.register(AppConfig.class);
ctx.refresh();

// you application is running ...

ctx.close();
}

关于spring - 可以通过属性文件设置 Spring 事件配置文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31976811/

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