【问题标题】:How to skip webflow definition(flow.xml) scan for third party jars如何跳过第三方 jar 的 webflow 定义(flow.xml)扫描
【发布时间】:2015-02-09 04:45:38
【问题描述】:

我们是否可以限制 spring webflow 定义 (flow.xml) 扫描以仅从我的 WEB-INF/LIB 文件夹中查找特定的 jar 模式? 我的 Web 应用程序在 WEB-INF/lib 文件夹中有近 700 个 jar,我希望仅对指定的 jar 名称模式进行扫描(例如:jar 名称以“com.xxx”开头)。 我已经完成了位置模式扫描,但我确实想限制 jar 扫描的数量,这样会更快。

谢谢, 克里希纳

【问题讨论】:

    标签: spring-webflow spring-webflow-2


    【解决方案1】:

    不确定我是否正确理解了您的问题。您的“flowRegistry”bean 是如何配置的?或者更好的是你的整个 spring webflow 配置?

    可能的解决方案:

    1. 您可以在“flow-location-pattern”中传入通配符(例如 value="/**/*-flow.xml")提供搜索模式。

    2. 您还可以在 flow-registry 上设置 base-path 属性来指示流(扫描)的根目录将从哪里开始。

    3. 最后,您还可以使用 flow-location path="..."

    显式声明您的流程

    下面的示例配置演示了如何使用上述所有 3 种可能的配置。

    示例配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:webflow="http://www.springframework.org/schema/webflow-config"
           xsi:schemaLocation="
               http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
               http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config.xsd">    
    
    <!-- The registry of executable flow definitions --> 
        <webflow:flow-registry id="flowRegistry" base-path="/WEB-INF/flows/s" flow-builder-services="flowBuilderServices">
            <webflow:flow-location-pattern value="/**/*-flow.xml" />
            <!--  <webflow:flow-location path="/flows/main-flow.xml" />-->
        </webflow:flow-registry>
    

    【讨论】:

    • 我已经在使用像 这样的位置模式.无论我们给出什么位置模式,spring 都会扫描 WEB-INF/lib 目录下的所有 jars。我想知道我们如何过滤这些 jar 扫描,以便 spring 只扫描与过滤条件匹配的给定 jar 名称。例如:在我的 WEB-INF/lib 目录中,如果我有 700 个 jar,并且我知道只有 10 个 jar 应该被扫描以查找 flow.xml 文件(其余都是其他依赖 jar,如日志记录、spring 核心 jar)。
    • 我认为您不应该扫描您的 lib 目录。我怀疑您的项目结构不使用标准约定。 web-flow 使用的资源加载器只是所有 spring 项目(spring-core.jar)使用的标准资源加载器。我建议在以下位置放置一个断点:1) org.springframework.webflow.config.FlowRegistryFactoryBean registerFlowLocationPatterns() 2) org.springframework.core.io.support.PathMatchingResourcePatternResolver getResources(String locationPattern)。尝试查看 lib 目录被扫描的原因。
    • 为什么你的 flow.xml 文件会嵌入到 jars 中?
    • 感谢您的建议。我们有基于模块的应用程序。每个模块都有自己的 jar 和自己的资源流 xml)。当我们在位置模式中使用 classpath*: 时,spring 资源加载器会扫描类路径中的所有文件(也包括 lib 文件夹)。让我检查一下是否有办法限制 jars 列表
    • 您可能需要实现自己的自定义 ResourceLoader stackoverflow.com/a/19547459/1041083 以仅过滤那些特定的 jar。另一种侵入性较小的可能性是扩展 FlowDefinitionResourceFactory 并将其注入 FlowRegistryFactoryBean.flowResourceFactory
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多