Spring Boot:部署到外部服务器时如何设置异步超时
Posted
技术标签:
【中文标题】Spring Boot:部署到外部服务器时如何设置异步超时【英文标题】:Spring Boot: how to set Async timeout when deploying to an external server 【发布时间】:2017-02-22 08:06:57 【问题描述】:在使用嵌入式 tomcat 部署我的 Spring Boot 应用程序时,我将异步超时设置如下:
@Bean
public EmbeddedServletContainerFactory servletContainer()
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.addConnectorCustomizers(new TomcatConnectorCustomizer()
@Override
public void customize(Connector connector)
connector.setAsyncTimeout(60000);
);
return factory;
但是,如何在部署到外部服务器(例如 websphere)时实现相同的功能?
尝试使用属性:
spring.mvc.async.request-timeout=600000
但这并没有任何效果。
编辑:
我曾尝试按照 Andrei 的建议实施 AsyncConfigurer。但它没有按预期工作。下面是我的配置类:
@SpringBootApplication
@EnableAsync
public class Application implements AsyncConfigurer
public static void main(String[] args)
SpringApplication.run(Application.class, args);
@Override
public Executor getAsyncExecutor()
Executor executor = new ThreadPoolExecutor(10, 20, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10),
new ThreadPoolExecutor.AbortPolicy());
return executor;
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler()
// TODO Auto-generated method stub
return new SimpleAsyncUncaughtExceptionHandler();
我已将超时设置为 60 秒,但在尝试此配置时,请求在 30 秒后超时。正在使用 RestClient。
我有什么遗漏吗?
【问题讨论】:
【参考方案1】:在 SpringApplication(首先实现名为 AsyncConfigurer
的接口)类中,我将创建我的自定义 AsyncExeuctor,如下所示:
@Override
public Executor getAsyncExecutor()
Executor executor = new ThreadPoolExecutor(
poolSize,
maxSize,
keepAlive,
TimeUnit.SECONDS, // <--- TIMEOUT IN SECONDS
new ArrayBlockingQueue<>(qSize),
new ThreadPoolExecutor.AbortPolicy() // <-- It will abort if timeout exceeds
);
return executor;
您可以在application.properties文件中配置poolSize
、maxSize
等,然后使用@Value注解“注入”它们。
【讨论】:
有没有办法以Spring Boot方式做到这一点,我的意思是不实现AsynCConfigurer,直接在标有@SpringBootApplication的类中编写一些配置? @bidishamukherjee 代码 sn-p 来自标有@SpringBootApplication
的类。该类需要实现 AsyncConfigurer。
好的,知道了。但是你能否解释一下为什么设置 spring.mvc.async.request-timeout 属性不起作用?感谢您已经给出的答案。
@bidishamukherjee 我不知道这个属性...我从未使用过它。
试过你的方法,但它对我不起作用。添加了我的配置类。你能看一下吗?以上是关于Spring Boot:部署到外部服务器时如何设置异步超时的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot在部署到Tomcat期间无法加载外部jar
当部署在外部服务器上作为战争时,spring boot 是使用外部服务器还是嵌入式服务器?
如何将外部jar文件传递给spring boot项目? [复制]