0

是否可以像往常一样构建一个spring应用程序jar文件/w所有jar依赖项打包在jar中,但是在jar外部定义资源文件夹+ spring app-context.xml?如果是这样,谁能给我举个例子?

如果可能的话,我想使用 maven 构建,但是 maven 将资源压缩到 jar 的根目录,我希望这些资源在外部可用/捕获,所以我想这里实际上有 2 个问题。

  1. 你如何让 spring 使用来自外部文件的上下文/属性。(例如外部“类路径*:/META-INF/spring/applicationContext.xml”)
  2. 你如何让 maven 打包 jar 文件,而不是将资源压缩到主 jar。虽然我猜这可以通过 maven 插件进行配置......我猜第一个问题更重要,我只是认为有某种模板解决方案可以解决这个问题,但无法找到示例。
4

3 回答 3

0

你如何让 spring 使用来自外部文件的上下文/属性。

使用弹簧PropertyPlaceholderConfigurer

<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="locations">
        <list>
            <value>classpath:included.properties</value>
            <value>file:${HOME}/external.properties</value>
        </list>
    </property>
</bean>

locations将按顺序读取,后面的项目将覆盖早期项目的属性值。

你如何让 maven 打包 jar 文件,而不是将资源压缩到主 jar。

如果上面的第一个答案对您有帮助,则无需这样做。

于 2013-05-24T13:27:54.510 回答
0

我想我知道你在说什么。您正在尝试将特定于系统的配置保留在包之外。

我过去所做的是将 applicationContext.xml 留在 jar 中,但也有对外部的引用。该文件包含系统特定的属性。我一般是放到应用容器(tomcat)/lib目录下。

如果您正在运行命令行应用程序,那么您可以将文件作为 -classpath 参数传入我猜。

我刚刚在工件内的 applicationContext.xml 顶部有这样一行:

<import resource="classpath*:externalized-applicationContext.xml"/>
于 2013-05-24T13:28:02.467 回答
0

我最终能够使用 maven-shade-plugin 来编辑 uber jar 的清单。一旦你得到了适合 shade 插件的 xml 咒语,你必须为具有同名处理程序的 spring 依赖项设置规则,它们在类加载器中相互冲突。您还需要修改清单类路径条目以包含您的文件夹名称。如果操作正确,这将为您提供一个“超级” jar + 资源,它可以整齐地放在与其相邻的文件夹中。其他一切都是标准的maven + spring的东西。

于 2014-05-22T22:05:36.480 回答