Niolocker-提供的外部“扫描仪”上必须存在“过滤器”和“储物柜”选项

时间:2018-08-14 13:41:46

标签: java spring-boot locking spring-integration nio

在Spring启动应用程序中,添加文件时出现以下异常:inbound-channel-adapter中的nio-locker 获取文件锁定

异常:必须在提供的外部“扫描仪”上显示“过滤器”和“储物柜”选项

堆栈跟踪: 启动应用程序时遇到以下错误。设置bean属性“ source”时无法解析对bean“ filesInChannel.adapter.source”的引用;嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名称为'filesInChannel.adapter.source'的bean时出错:FactoryBean在对象创建时抛出了异常;嵌套异常是java.lang.IllegalStateException:所提供的外部“扫描器”上必须存在“过滤器”和“储物柜”选项:org.springframework.integration.file.RecursiveDirectoryScanner@358ee631
“过滤器”和“储物柜”选项必须出现在提供的外部“扫描仪”上

<file:inbound-channel-adapter id="filesInChannel"
    directory="file:${base.path}" auto-startup="false" scanner="recursiveScanner" auto-create-directory="true">

      <integration:poller id="poller" max-messages-per-poll="${max.messages.per.poll}" fixed-rate="${message.read.frequency}" task-executor="pollingExecutor">
        <integration:transactional transaction-manager="transactionManager" />
      </integration:poller>
      <file:nio-locker/>
</file:inbound-channel-adapter>


    <bean id="inboundFilter" class="org.springframework.integration.file.filters.CompositeFileListFilter">
 <constructor-arg>
     <list>
        <bean class="org.springframework.integration.file.filters.AcceptOnceFileListFilter"/>
        <bean class="org.springframework.integration.file.filters.RegexPatternFileListFilter">
            <constructor-arg value="${file.type}"/>
        </bean>
     </list>
 </constructor-arg>
</bean>
       <bean id="recursiveScanner" class="org.springframework.integration.file.RecursiveDirectoryScanner">
    <property name="filter" ref="inboundFilter" />
    </bean>

请您对此提出建议。

1 个答案:

答案 0 :(得分:2)

您在scanner="recursiveScanner"上进行了<file:inbound-channel-adapter>,但同时使用了<file:nio-locker/>子元素。这就是您违反要求并获得该例外的方式。

根据错误消息中的建议,您需要将NioFileLocker引用移至RecursiveDirectoryScanner bean定义中:

<bean id="recursiveScanner" class="org.springframework.integration.file.RecursiveDirectoryScanner">
   <property name="filter" ref="inboundFilter" />
   <property name="locker" ref="nioLocker" />
</bean>