当前位置:  开发笔记 > 编程语言 > 正文

根据.properties文件中的属性导入Spring配置文件

如何解决《根据.properties文件中的属性导入Spring配置文件》经验,为你挑选了3个好方法。

在我的Spring xml配置中,我试图让这样的东西起作用:



   

   


我想根据属性文件中的属性决定导入哪个文件.我知道我可以使用System属性,但我无法在启动时向JVM添加属性.

注:PropertyPlaceHolderConfigurer将无法正常工作.在运行任何BeanFactoryPostProcessor之前解析导入.import元素只能解析System.properties.

有人有一个简单的解决方案吗?我不想开始子类化框架类等等......

谢谢



1> Louis Marasc..:

不幸的是,这比应该的要困难得多.在我的应用程序中,我完成了以下操作:

    一个小的"引导程序"上下文,负责加载PropertyPlaceholderConfigurer bean和另一个负责引导应用程序上下文的bean.

    上面提到的第二个bean将要加载的"真实"spring上下文文件作为输入.我将弹簧上下文文件组织起来,以便可配置部分在同一个地方是众所周知的.例如,我可能有3个配置文件:one.onpremise.xml,one.hosted.xml,one.multitenant.xml.bean以编程方式将这些上下文文件加载到当前应用程序上下文中.

这是有效的,因为上下文文件被指定为负责加载它们的bean的输入.如果你只是尝试进行导入,它将无法工作,正如你所提到的那样,但这会产生相同的效果,稍微多一些工作.bootstrap类看起来像这样:

 public class Bootstrapper implements ApplicationContextAware, InitializingBean {

    private WebApplicationContext context;
    private String[] configLocations;
    private String[] testConfigLocations;
    private boolean loadTestConfigurations;

    public void setConfigLocations(final String[] configLocations) {
        this.configLocations = configLocations;
    }

    public void setTestConfigLocations(final String[] testConfigLocations) {
        this.testConfigLocations = testConfigLocations;
    }

    public void setLoadTestConfigurations(final boolean loadTestConfigurations) {
        this.loadTestConfigurations = loadTestConfigurations;
    }

    @Override
    public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
        context = (WebApplicationContext) applicationContext;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        String[] configsToLoad = configLocations;

        if (loadTestConfigurations) {
            configsToLoad = new String[configLocations.length + testConfigLocations.length];
            arraycopy(configLocations, 0, configsToLoad, 0, configLocations.length);
            arraycopy(testConfigLocations, 0, configsToLoad, configLocations.length, testConfigLocations.length);
        }

        context.setConfigLocations(configsToLoad);
        context.refresh();
    }
}

基本上,获取应用程序上下文,设置其配置位置,并告诉它自己刷新.这在我的应用程序中完美运行.

希望这可以帮助.


我很惊讶这个解决方案没被接受.它简单而精彩

2> 小智..:

对于Spring 2.5和3.0,我有一个类似路易的解决方案,但是我刚刚读到了3.1即将发布的功能:物业管理,这听起来也很棒.



3> 小智..:

Spring JIRA上存在一个旧问题,用于添加属性占位符支持导入(SPR-1358),该解决方案被解析为"无法修复",但此后一直提出使用EagerPropertyPlaceholderConfigurer的解决方案.

我一直在游说让SPR-1358重新开放,但到目前为止还没有回应.也许如果其他人将他们的用例添加到问题评论中,这将有助于提高认识.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有