是否有可能像往常一样构建一个spring应用程序jar文件/所有jar依赖项打包在jar中,但是在jar外部定义资源文件夹+ spring app-context.xml?如果是这样,有人能指出我的一个例子吗?
我想使用maven进行构建,如果可能的话,但maven将资源收集到jar的根目录,我希望外部可用/捕获这些资源,所以我想这里实际上有2个问题。
答案 0 :(得分:0)
如何从外部文件中使用spring消耗上下文/属性。
使用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。
如果上面的第一个答案对您有帮助,则无需这样做。
答案 1 :(得分:0)
我想我知道你在做什么。您正在尝试将特定于系统的配置保留在程序包之外。
我过去所做的是将applicationContext.xml保留在jar中,但也引用了外部的。该文件包含特定于系统的属性。我通常把它放到应用程序容器(tomcat)/ lib目录中。
如果您正在运行命令行应用程序,那么您可以直接将该文件作为-classpath争论传递。
我刚刚在工件中的applicationContext.xml顶部找到了这样的一行:
<import resource="classpath*:externalized-applicationContext.xml"/>
答案 2 :(得分:0)
我最终能够使用maven-shade-plugin来编辑超级jar的清单。一旦你获得了适合shade插件的xml咒语,就必须为具有相同名称处理程序的spring依赖项设置规则,这些处理程序在类加载器中相互冲突。您还需要修改清单类路径条目以包含文件夹名称。如果做得正确,这将给你一个&#34; uber&#34;它使用的jar +资源整齐地坐在它旁边的文件夹中。其他一切都是标准的maven + spring。