当前位置: 首页 > 知识库问答 >
问题:

在spring boot中的tomcat嵌入中禁用Jar扫描的扫描清单

齐志勇
2023-03-14

我在日志中收到一些警告,像这样:

java.io.FileNotFoundException: C:\Users\user\.m2\repository\com\lowagie\itext\2.0.8\bcmail-jdk14-138.jar (O sistema não pode encontrar o arquivo especificado)
    at java.util.zip.ZipFile.open(Native Method) ~[na:1.8.0_121]
    at java.util.zip.ZipFile.<init>(ZipFile.java:219) ~[na:1.8.0_121]
    at java.util.zip.ZipFile.<init>(ZipFile.java:149) ~[na:1.8.0_121]
    at java.util.jar.JarFile.<init>(JarFile.java:166) ~[na:1.8.0_121]
    at java.util.jar.JarFile.<init>(JarFile.java:130) ~[na:1.8.0_121]
    at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:60) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
    at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:48) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
    at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:338) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
    at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:288) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
    at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262) [tomcat-embed-jasper-8.5.6.jar:8.5.6]
    at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104) [tomcat-embed-jasper-8.5.6.jar:8.5.6]
    at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:101) [tomcat-embed-jasper-8.5.6.jar:8.5.6]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5178) [tomcat-embed-core-8.5.6.jar:8.5.6]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.6.jar:8.5.6]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403) [tomcat-embed-core-8.5.6.jar:8.5.6]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393) [tomcat-embed-core-8.5.6.jar:8.5.6]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_121]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_121]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_121]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_121]

在一个独立的tomcat中,我可以创建一个context.xml

<Context>
  ...
  <JarScanner scanManifest="false"/>
  ...
</Context>

如何禁用清单文件的JarScanner(https://tomcat.apache.org/tomcat-8.0-doc/config/jar-scanner.html)在使用Spring Boot的java配置类中。

共有3个答案

臧翰采
2023-03-14

只是想提高奥列格关于Spring Boot 1. x的优秀答案...

以下是Spring Boot 2.0(Tomcat 8.5)的相应代码:

  @Bean
  public TomcatServletWebServerFactory tomcatFactory() {
    return new TomcatServletWebServerFactory() {
      @Override
      protected void postProcessContext(Context context) {
        ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
      }
    };
  }

只需将其添加到应用程序的配置中。

施洛城
2023-03-14

这是可控的通过属性现在:

# Comma-separated list of additional patterns that match jars to ignore for TLD scanning.    
server.tomcat.additional-tld-skip-patterns=*.jar

通过从Spring boot 1.2升级到1.5.2后,在Tomcat 8.5启动期间FileNotFoundException

那昊
2023-03-14

编辑:这个怎么样?

  @Bean
  public EmbeddedServletContainerFactory embeddedServletContainerFactory() {
    return new TomcatEmbeddedServletContainerFactory() {
      @Override
      protected void postProcessContext(Context context) {
        ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
      }
    };
  }
 类似资料:
  • 我开发了一个字符排序器,我想每次字符串排序后提示用户输入一个新的字符串。我遇到的问题是扫描仪一直在扫描用户的第一个输入。如果我使用scanner.next(),它不会计算输入末尾的空白,这不是解决方案。 这是while循环的开始。一旦代码完成,它将再次从“inputtext”开始。

  • 我的webapp包含一个库,其中包含一个用注释的类。如果存在此类,我的webapp(部署为EAR中的WAR)将无法启动,并出现以下错误: 我根本没有使用jersey,我没有使用任何jax-rs服务和我的web。xml不包含与jersey相关的servlet。我不明白为什么weblogic在我的应用程序中初始化jersey并扫描jars相关的JAR。 我在互联网上找到的与此相关的大多数信息导致人们以

  • 我将Tomcat 7.0.32嵌入到一个水槽源代码中。我遇到的问题是Flume在类路径上放置了大量的东西,在启动时,Tomcat会扫描类路径寻找TLD,这是因为Flume使用通配符而导致的问题。 信息:启动Servlet引擎:Apache Tomcat/7.0.32 Nov.052012 8:21:08 AM org.Apache.catalina.startup.tldconfig tldSca

  • 2017年11月9日下午2:21:22 org.apache.coyote.abstractProtocol start Info:Starting ProtocolHandler[“http-nio-8080”]2017年11月9日下午2:21:30 org.jboss.resteasy.core.exceptionHandler严重:未能执行javax.ws.rs.NotFoundExcept

  • 问题内容: 我正在尝试解决可以在这里找到的SPOJ问题 以下是我的解决方案: 该代码工作正常。这里的问题是在SPOJ中执行超时时会超时。 我最初只是使用,但是随后遇到了这个线程,建议我改用它来进行更快的输入扫描。 但是我仍然遇到超时问题。我只是循环获取所有输入,并且在此循环本身中,我确定输入是否可分割。因此,我认为这不是循环而是输入扫描需要时间。如何改善此功能以更快地读取输入?还是这个问题在其他地

  • 我们有一个依赖项(JAR),它确实包含一个清单文件,该文件在其条目中引用了其他JAR。应用程序不需要这些引用的其他JAR,因此不会作为依赖项添加。 当应用程序启动时,tomcat 会尝试解析该类路径条目,最终在日志中出现大量错误。喜欢: 如这里所述,Tomcat已经实现了一个开关来禁用清单的扫描,以防止出现此问题:https://bz.apache.org/bugzilla/show_bug.cg