当前位置: 首页 > 知识库问答 >
问题:

使用spring配置文件加载环境属性

邢焱
2023-03-14

我在spring,Java,Antweb应用程序中工作。我正在使用spring分析加载基于环境的属性。下面是样品

@Profile("dev")
@Component
@PropertySource("classpath:dev.properties")
public class DevPropertiesConfig{

}
@Profile("qa")
@Component
@PropertySource("classpath:qa.properties")
public class TestPropertiesConfig {

}

@Profile("live")
@Component
@PropertySource("classpath:live.properties")
public class LivePropertiesConfig{

}

在web.xml中,我们可以给出配置文件

    <context-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>dev</param-value>
    </context-param>

现在,我的查询是针对我需要创建一个单独的Java类的每个环境。

问题:是否可能只有一个类,比如提供配置文件名称作为某个绑定参数,比如@profile({profile})

同时,让我知道是否有其他更好的选择,以实现同样的。

共有1个答案

邵兴文
2023-03-14

一次可以有多个配置文件活动,因此没有单个属性来获取活动配置文件。一般的解决方案是创建ApplicationContextInitializer,它基于活动配置文件加载其他配置文件。

public class ProfileConfigurationInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    public void initialize(final ConfigurableApplicationContext ctx) {
        ConfigurableEnvironment env = ctg.getEnvironment();
        String[] profiles = env.getActiveProfiles();
        if (!ArrayUtils.isEmpty(profiles)) {
            MutablePropertySources mps = env.getPropertySources();
            for (String profile : profiles) {
               Resource resource = new ClassPathResource(profile+".properties");
               if (resource.exists() ) {
                   mps.addLast(profile + "-properties", new ResourcePropertySource(resource);
               }
            }
        }
    }
}

像这样的东西应该能起到作用(当我从头顶输入时可能包含错误)。

现在,在web.xml中包含一个名为ContextInitializerClasss的上下文参数,并为其指定初始值设定项的名称。

<context-param>
    <param-name>contextInitializerClasses</param-name>
    <param-value>your.package.ProfileConfigurationInitializer</param-value>
</context-param>
 类似资料:
  • 我正在一个spring启动的应用程序,我需要你的协助在下面的场景。 我有每个环境的属性文件,比如application-dev.properties,application-prod.properties等。我的应用程序可以通过使用spring@profile注释来加载特定于环境的属性文件。 请帮帮忙。

  • 我需要为不同的环境加载属性,如DEV、QA和我为每个环境都有不同的属性文件。因此,我通过在服务器中设置environment属性并访问该值以加载相应的属性文件来解决这一问题。在谷歌搜索时,我发现spring环境配置文件提供了类似场景的解决方案。然而,即使在这里,我也必须将服务器中的active-profile变量设置为环境变量。 与本机方法相比,使用spring环境配置文件有什么好处?

  • 本文向大家介绍Spring Boot使用profile如何配置不同环境的配置文件,包括了Spring Boot使用profile如何配置不同环境的配置文件的使用技巧和注意事项,需要的朋友参考一下 在springboot的开发中,有时候我们会有不同的配置,例如日志打印,数据库连接等,开发,测试,生产每个环境可能配置都不一致,还好,springboot支持通过不同的profile来配置不同环境的配置,

  • 问题内容: 我正在做一个简单的管道: 建立- >分期->生产 我需要分期和生产不同的环境变量,所以我试图 源 变量。 但返回 未找到 路径是正确的,因为通过ssh登录时我运行相同的命令,并且工作正常。 这是管道的想法: 我该怎么办? 我正在考虑不使用管道(但是我将无法使用我的Jenkinsfile)。 或使用EnvInject插件为舞台制作和制作不同的工作(但我失去了舞台视图) 或者用env制作(

  • 问题内容: 我已经编写了一个PropertyUtils类(来自互联网),它将加载属性 而PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil.getProperty()方法来获取属性。 但是现在我要稍作修改,以便如果myApp.properties被用户修改/更改,则应再次加载 可能我需要FileWatcher类 但我的怀疑是 如何使用classpath:myA