在Spring Web应用程序中加载外部应用程序配置

时间:2015-03-27 18:49:05

标签: java xml spring spring-mvc jaxb

在我的多模块spring MVC Web应用程序中,我添加了一个模块,它是一种API(不是Spring管理的)。 API有一个配置文件,即config.xml(驻留在/ main / java / resource中)。我将API作为依赖项注入弹簧管理模块。

<bean id="conf" class="a.b.c.ConfLoader" factory-method="load">
    <constructor-arg  type="java.lang.String" value="config.xml" />
</bean>

<bean id="builder" class="a.b.c.Builder">
    <constructor-arg ref="conf" />
</bean>

使用JAXB Unmarshalling,将XML转换为Object

public static Configuration load(String configXML) {
    JAXBElement<Configuration> unmarshalledObject = null;
    try {
        JAXBContext jaxbContext = JAXBContext
                .newInstance(ObjectFactory.class);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        unmarshalledObject = (JAXBElement<Configuration>) unmarshaller
                .unmarshal(Thread.currentThread().getContextClassLoader().getResourceAsStream(configXML));

    } catch (JAXBException e) {
        LOGGER.error(e.getLocalizedMessage(), e);
    }
    Configuration config = new Configuration();
    if (unmarshalledObject != null) {
        config = unmarshalledObject.getValue();
    }
    return config;
}

只要config.xml位于应用程序的(API)资源文件夹(/ main / java / resource)下,这样就可以正常工作。

我需要将config.xml保留在应用程序之外,因为它具有特定于环境的配置。

我试图将config.xml保存到tomcat的conf目录中,但它没有加载。我需要从应用程序以外的其他位置加载它。

任何方向和帮助都会非常值得注意。

1 个答案:

答案 0 :(得分:0)

方法unmarchal将File作为参数,因此您可以执行以下操作:

 unmarshalledObject = (JAXBElement<Configuration>) unmarshaller
                .unmarshal(new File(pathtofile));