Spring integration Tomcat在关机时抱怨spring集成内存泄漏

Spring integration Tomcat在关机时抱怨spring集成内存泄漏,spring-integration,Spring Integration,我在关闭tomcat时遇到以下错误 严重:web应用程序[/TestService]似乎已启动名为[SimpleAsyncTaskExecutor-3]的线程,但未能停止该线程。这很可能会造成内存泄漏 公共接口测试网关{ 未来执行(请求); } 一些想法 如果你不在乎结果,就返回void 您如何实例化应用程序上下文?如果使用普通的SpringWeb,spring应该注意关闭上下文;如果你是自己创建的,就由你来关闭它 进行线程转储以查看线程正在执行的操作 编辑: public interfac

我在关闭tomcat时遇到以下错误

严重:web应用程序[/TestService]似乎已启动名为[SimpleAsyncTaskExecutor-3]的线程,但未能停止该线程。这很可能会造成内存泄漏


公共接口测试网关{
未来执行(请求);
}
一些想法

  • 如果你不在乎结果,就返回void
  • 您如何实例化应用程序上下文?如果使用普通的SpringWeb,spring应该注意关闭上下文;如果你是自己创建的,就由你来关闭它
  • 进行线程转储以查看线程正在执行的操作
  • 编辑:

     public interface TestGateway {
         void execute(Request request);
        }
    
        <bean id="requestChannelTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >
            <property name="corePoolSize" value="10" />
            <property name="daemon" value="false"/>
       </bean>  
       <int:channel id="requestChannel">
       <int:dispatcher task-executor="requestChannelTaskExecutor"/>
       </int:channel>
    
    如果您的流从未返回回复,则网关中的TE将被卡住,等待回复

    所以,;返回
    void
    就不会有问题。

    一些想法

  • 如果你不在乎结果,就返回void
  • 您如何实例化应用程序上下文?如果使用普通的SpringWeb,spring应该注意关闭上下文;如果你是自己创建的,就由你来关闭它
  • 进行线程转储以查看线程正在执行的操作
  • 编辑:

     public interface TestGateway {
         void execute(Request request);
        }
    
        <bean id="requestChannelTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >
            <property name="corePoolSize" value="10" />
            <property name="daemon" value="false"/>
       </bean>  
       <int:channel id="requestChannel">
       <int:dispatcher task-executor="requestChannelTaskExecutor"/>
       </int:channel>
    
    如果您的流从未返回回复,则网关中的TE将被卡住,等待回复


    所以,;返回
    void
    ,您就不会有问题。

    除了Gary的答案和您的问题:要立即从单向网关返回并异步处理下游流,您应该将网关的
    请求通道
    设置为
    执行通道
    队列通道
    ,并且不要担心timeout.1)我尝试使方法无效,将requestChannel与任务执行器关联(用于处理多个同时请求),但即使如此,线程也没有释放。3) 我使用什么进行线程转储,您有什么建议吗?请显示您的配置(编辑问题)。如果没有
    Future
    返回类型,网关内的任务执行者将不会获得任何任务。最后,您还可以向网关添加
    reply timeout=“0”
    ,以便,它不会等待答复。除了Gary的回答和您的问题:要从单向网关立即返回并异步处理下游流,您应该将网关的
    请求通道
    设置为
    执行通道
    队列通道
    ,并且不要担心超时。1)我尝试了这个方法void,将requestChannel与任务执行器关联(用于处理多个同时请求)——但即使这样,线程也没有被释放。3) 我使用什么进行线程转储,您有什么建议吗?请显示您的配置(编辑问题)。如果没有
    Future
    返回类型,网关内的任务执行者将不会获得任何任务。最后,您还可以向网关添加
    reply timeout=“0”
    ,这样它也不会等待回复。