标签: embedded-tomcat

spring-boot 应用程序的 keep-alive 配置(带有嵌入式 tomcat)

我正在尝试修复/调试使用嵌入式 tomcat 的 spring-boot web 应用程序中关闭连接过多的问题。问题出现是因为它关闭了应该保持活动的连接。

现在,我发现,Tomcat有配置限制保持活动连接数(见maxKeepAliveRequestshttps://tomcat.apache.org/tomcat-8.5-doc/config/http.html),并有可能是其它的配置,可以与问题有关。但我的问题是我没有看到这些参数在哪里给出,或者如果使用默认值我可以如何更改它们。

我的问题:我在哪里可以找到解释如何配置 spring-boot/embedded-tomcat keep-alive 参数的文档,这些参数是哪些?

keep-alive spring-boot embedded-tomcat

7
推荐指数
1
解决办法
1万
查看次数

如何使用嵌入式tomcat增加Spring Boot中的文件大小上传限制

我尝试使用我的 Spring Boot API 上传文件。当我使用小文件(小于 1 MB)时,该函数工作正常,但当我上传大文件时,它给了我一个例外。我正在使用嵌入式 Tomcat 服务器。

Maximum upload size exceeded; 
nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
Run Code Online (Sandbox Code Playgroud)

我在我的文件中尝试了以下代码,但每次我都会收到错误

1. 应用程序.属性

server.tomcat.max-swallow-size=100MB
server.tomcat.max-http-post-size=100MB
spring.servlet.multipart.enabled=true 
spring.servlet.multipart.fileSizeThreshold=100MB
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
Run Code Online (Sandbox Code Playgroud)

我也尝试过

spring.servlet.multipart.maxFileSize=100MB
spring.servlet.multipart.maxRequestSize=100MB
Run Code Online (Sandbox Code Playgroud)

2.以下是我的文件上传代码

public RestDTO uploadFile(MultipartFile file, String subPath) {

    if (file.isEmpty()) {
        return new RestFailure("Failed to store empty file");
    }

    try {
        String fileName = new Date().getTime() + "_" + file.getOriginalFilename();
        String filePath = uploadPath + subPath + fileName;
        if …
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc spring-boot embedded-tomcat

7
推荐指数
1
解决办法
2万
查看次数

简单的嵌入式 Tomcat 10 示例

我正在尝试让一个简单的嵌入式 tomcat10.1.0-M11示例正常工作,但是localhost refused to connect当我访问http://localhost:8080/aa.

这是我的代码:

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class App {

    public static void main(String[] args) throws LifecycleException {
        Tomcat tomcat = new Tomcat();
        tomcat.setBaseDir("temp");
        tomcat.setPort(8080);

        String contextPath = "";
        String docBase = new File(".").getAbsolutePath();

        Context context = tomcat.addContext(contextPath, docBase);

        class SampleServlet extends HttpServlet {

            @Override
            protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                    throws ServletException, IOException …
Run Code Online (Sandbox Code Playgroud)

java tomcat embedded-tomcat embedded-tomcat-10

7
推荐指数
1
解决办法
5049
查看次数

如何在 spring-boot 3.x 中设置 maxHttpHeaderSize

如Spring Boot 3 迁移指南中所述,server.max -http-header-size属性已被弃用。您可以使用server.max-http-request-header-size属性设置最大 http 请求标头大小。

我收到以下异常:

org.apache.coyote.http11.HeadersTooLargeException: An attempt was made to write 
more data to the response headers than there was room available in the buffer. 
Increase maxHttpHeaderSize on the connector 
or write less data into the response headers.
Run Code Online (Sandbox Code Playgroud)

我需要增加嵌入式 Tomcat 10 中的最大 http 响应标头大小。Tomcat 10支持maxHttpHeaderSizemaxHttpResponseHeaderSize属性。

我如何在 Spring Boot 3.x 中使用 来设置这些WebServerFactoryCustomizer

java spring spring-boot embedded-tomcat tomcat10

6
推荐指数
1
解决办法
8635
查看次数

对于某些任务,Gradle 执行会冻结 3 分钟

我有 2 个相对简单的 Gradle 6.1.1 配置,一个是使用https://plugins.gradle.org/plugin/com.github.node-gradle.node来构建一个 React 应用程序,另一个是基于https: //plugins.gradle.org/plugin/com.bmuschko.tomcat并在嵌入式 tomcat 中运行一个简单的 wicket 应用程序。

npm 任务的第一个配置是:

apply plugin: 'com.github.node-gradle.node'
node {
    version = '12.16.0'
    download = true
    workDir = file "$project.buildDir/nodejs"
}

task "npmBuild"( type:NpmTask ) {
    args = [ 'run', 'build' ]
}
Run Code Online (Sandbox Code Playgroud)

并在 Windows 10 中产生以下输出:

>gradlew.bat npmBuild
Starting a Gradle Daemon (subsequent builds will be faster)

> Task :npmBuild

> layer-selection@0.1.0 build .....
> react-scripts build

Creating an optimized production build...
Compiled with warnings. …
Run Code Online (Sandbox Code Playgroud)

java tomcat gradle node.js embedded-tomcat

5
推荐指数
1
解决办法
287
查看次数

SpringBoot - HttpMessageNotReadableException:JSON解析错误:java.net.SocketTimeoutException

我的代码抛出异常如下

JSON parse error: java.net.SocketTimeoutException; nested exception is com.fasterxml.jackson.databind.JsonMappingException: java.net.SocketTimeoutException (through reference chain: java.util.ArrayList[9])
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: java.net.SocketTimeoutException; nested exception is com.fasterxml.jackson.databind.JsonMappingException: java.net.SocketTimeoutException (through reference chain: java.util.ArrayList[9])
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:245) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:227) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:204) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:157) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:127) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) [spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
Run Code Online (Sandbox Code Playgroud)

我的spring-boot版本是2.1.7.RELEASE,嵌入式tomcat用于运行应用程序。我也设置了属性server.connection-timeout=30s

我几乎到处搜索都无法找出这个问题的根本原因。我还捕获此异常并将其打印在日志中并将响应作为 BAD_REQUEST 返回。

这个异常是间歇性抛出的,我的生产服务器此时消耗了 80% 以上的 CPU 和内存。

这实际上是一个 POST 请求,请求正文的验证如下 …

java spring-boot embedded-tomcat

5
推荐指数
1
解决办法
1671
查看次数

为什么我的带有嵌入式 tomcat 的 Springboot 在处理第一个请求时太慢?

环境

操作系统:macOS Mojave 版本 10.14.5(centOS 也有同样的问题)

Springboot:2.1.6.RELEASE(内嵌tomcat 9.0.21),war

我是Spring Boot的新手,我认为这对我的项目有帮助。现在我已经完成了我的工作,但是一个奇怪的现象困扰着我。我的项目响应第一个请求大约需要 5 分钟,它花费 5 分钟而不是 5 秒,第一次之后的请求似乎正常。它非常慢,所以我需要你的帮助。

jstack我的帮助下,大部分时间都花在了做下面的事情上,同样是做拆包战争。

"http-nio-15281-exec-5" #105 daemon prio=5 os_prio=31 tid=0x00007f988eaff800 nid=0x13b03 runnable [0x0000700013218000]
   java.lang.Thread.State: RUNNABLE
    at java.util.zip.Inflater.inflateBytes(Native Method)
    at java.util.zip.Inflater.inflate(Inflater.java:259)
    - locked <0x00000007bac79ab0> (a java.util.zip.ZStreamRef)
    at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:152)
    at java.util.zip.ZipInputStream.read(ZipInputStream.java:194)
    at java.util.jar.JarInputStream.read(JarInputStream.java:207)
    at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:140)
    at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:118)
    at java.util.jar.JarInputStream.getNextEntry(JarInputStream.java:142)
    at java.util.jar.JarInputStream.getNextJarEntry(JarInputStream.java:179)
    at org.apache.catalina.webresources.JarWarResourceSet.getArchiveEntries(JarWarResourceSet.java:117)
    - locked <0x00000007810e7770> (a java.lang.Object)
    at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:253)
    at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:282)
    at org.apache.catalina.webresources.Cache.getResource(Cache.java:62)
    at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:217)
    at org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:226)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2303)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:865)
    at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.findClassIgnoringNotFound(TomcatEmbeddedWebappClassLoader.java:119)
    at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.doLoadClass(TomcatEmbeddedWebappClassLoader.java:84)
    at …
Run Code Online (Sandbox Code Playgroud)

java performance tomcat spring-boot embedded-tomcat

4
推荐指数
2
解决办法
4539
查看次数