大型文件上传期间的 Grails 连接超时

Posted

技术标签:

【中文标题】大型文件上传期间的 Grails 连接超时【英文标题】:Grails connection timeout during large fileupload 【发布时间】:2014-08-31 11:20:50 【问题描述】:

如果用户尝试从我的 Grails Web 应用程序中的上传表单上传大文件,我想防止在大约 1 分钟后出现 SocketTimeoutException。我知道这是 Tomcat 的事情,而不是 Grails 的事情,但我正在努力使用 _Events.groovy 中的 eventConfigureTomcat 事件块修改 server.xml

根据tomcat docs 有一个disableUploadTimeout 属性,我应该在连接器上设置为true,但是当我在eventConfigureTomcat 块中尝试此操作时,当我的应用程序启动时出现以下错误:

| Running Grails application
| Error Server failed to start: No such property: disableUploadTimeout for class: org.apache.catalina.connector.Connector (Use --stacktrace to see the full trace)

我的_Events.groovy 的内容是这样的:

eventConfigureTomcat =  tomcat ->
    tomcat.connector.disableUploadTimeout = "true"

而且该错误确实有意义 - 根据 javadoc,该连接器实现上没有属性 disableUploadTimeout

我做错了什么?我应该如何设置此属性,或者是否有其他方法可以防止长时间运行的文件上传超时?

【问题讨论】:

发生超时时您在 catalina.out 中收到的确切错误消息是什么? 请注意,根据您链接的文档,disableUploadTimeout 默认为true,您应该将其设置为false,以便您可以为connectionUploadTimeout 设置更长的超时期限。 (不幸的是,我不知道如何正确设置这些值。) 【参考方案1】:

没查过,但是看了一下tomcat文档,你要修改的配置好像是Connector的一个属性。

连接器有一个名为setAttribute 的方法。所以我猜你会用下面的代码成功:

eventConfigureTomcat =  tomcat ->
    tomcat.connector.setAttribute('disableUploadTimeout', true); //may 'true'

不得不承认我自己无法测试这段代码......

更新:根据@Charles-Wood,它必须设置为false 而不是true

PS:如果您发布有关如何重现问题的更多信息,我会尝试一下

【讨论】:

我的连接器为空。有什么线索吗?

以上是关于大型文件上传期间的 Grails 连接超时的主要内容,如果未能解决你的问题,请参考以下文章

Grails 2.3.0 和 mysql 连接超时

FTP上传文件连接超时,本地无问题,服务器上面连接超时?

MySQL 连接超时问题 - 使用 Hibernate 和 ORM 的 Tomcat 上的 Grails 应用程序

grails应用程序中的Mysql连接超时,在ELB上使用mariadb galera集群

Apache 在上传大文件时检索超时错误并关闭连接

索引期间Solr连接超时?