异常:

  1. java.io.FileNotFoundException: /Users/lanhuajian/.m2/repository/org/apache/derby/derby/10.13.1.1/derbyLocale_cs.jar (No such file or directory)
  2. at java.util.zip.ZipFile.open(Native Method) ~[?:1.8.0_152]
  3. at java.util.zip.ZipFile.<init>(ZipFile.java:225) ~[?:1.8.0_152]
  4. at java.util.zip.ZipFile.<init>(ZipFile.java:155) ~[?:1.8.0_152]
  5. at java.util.jar.JarFile.<init>(JarFile.java:166) ~[?:1.8.0_152]
  6. at java.util.jar.JarFile.<init>(JarFile.java:130) ~[?:1.8.0_152]
  7. at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:60) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
  8. at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:49) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
  9. at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:338) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
  10. at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:288) [tomcat-embed-core-8.5.23.jar:8.5.23]
  11. at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262) [tomcat-embed-jasper-8.5.23.jar:?]
  12. at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104) [tomcat-embed-jasper-8.5.23.jar:?]
  13. at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:101) [tomcat-embed-jasper-8.5.23.jar:?]
  14. at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196) [tomcat-embed-core-8.5.23.jar:8.5.23]
  15. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.23.jar:8.5.23]
  16. at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) [tomcat-embed-core-8.5.23.jar:8.5.23]
  17. at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) [tomcat-embed-core-8.5.23.jar:8.5.23]
  18. at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) [?:1.8.0_152]
  19. at java.util.concurrent.FutureTask.run(FutureTask.java) [?:1.8.0_152]
  20. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_152]
  21. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_152]
  22. at java.lang.Thread.run(Thread.java:748) [?:1.8.0_152]

springboot集成hadoop等组件后会报这个错,一般和hadoop集成需要把老版本的sevlet、jsp、tomcat依赖去掉,但是我去掉之后还是存在。

所以我跟踪了springboot初始化tomcat的代码,发现在TomcatEmbeddedServletContainerFactory#prepareContext()有个tldSkipPatterns的东西, 就心想这个是不是会告诉tomcat不要扫描这些jar包呢?试了一下,真的可以!

因此可以得出如下解决方案,在初始化TomcatEmbeddedServletContainerFactory后,在后置bean处理器中给它加上tldSkipPatterns即可

  1. import org.springframework.beans.BeansException;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.beans.factory.config.BeanPostProcessor;
  4. import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import java.util.Arrays;
  8. import java.util.List;
  9. import static java.util.stream.Collectors.toList;
  10. @Configuration
  11. public class TomcatContainerConfig {
  12. @Value("${tldSkipPatterns}")
  13. private String[] tldSkipPatterns;
  14. @Bean
  15. public BeanPostProcessor TomcatContainerPostProcessor() {
  16. List<String> notEmptyTldSkipPatterns = Arrays.stream(tldSkipPatterns)
  17. .filter(tldSkipPattern -> !tldSkipPattern.trim().isEmpty())
  18. .collect(toList());
  19. return new BeanPostProcessor() {
  20. @Override
  21. public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
  22. return bean;
  23. }
  24. @Override
  25. public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
  26. if (beanName.equals("tomcatEmbeddedServletContainerFactory") &&
  27. bean instanceof TomcatEmbeddedServletContainerFactory) {
  28. TomcatEmbeddedServletContainerFactory factory = (TomcatEmbeddedServletContainerFactory) bean;
  29. if (!notEmptyTldSkipPatterns.isEmpty()) {
  30. factory.addTldSkipPatterns(notEmptyTldSkipPatterns.toArray(new String[0]));
  31. }
  32. }
  33. return bean;
  34. }
  35. };
  36. };
  37. }

增加下面的配置到 application.properties:

  1. tldSkipPatterns=derbyLocale_*.jar,jaxb-api.jar,jsr173_1.0_api.jar,jaxb1-impl.jar,activation.jar

springboot启动嵌入式tomcat报错找不到jar包,关键字:FileNotFoundException,derbyLocale_cs.jar,StandardJarScanner.scan的更多相关文章

  1. springboot 启动的时候报错 Error creating bean with name 'solrClient'

    springboot 启动的时候报错: org.springframework.beans.factory.BeanCreationException: Error creating bean wit ...

  2. eclipse使用maven,启动工程tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.Contex

    maven是个不错的管理jar包工具,但是我们在eclipse使用maven时,总是遇上这样那样的问题,比如今天,我编译工程,启动过后,tomcat报错:java.lang.ClassNotFound ...

  3. SpringBoot启动嵌入式tomcat源码解读

    一.SpringBoot自动拉起Tomcat SpringBoot框架是当前比较流行的java后端开发框架,与maven结合大大简化了开发人员项目搭建的步骤,我们知道SpringBoot的启动类启动后 ...

  4. web项目——启动时tomcat报错:Server Tomcat v7.0 Server at localhost failed to start.

    报错信息:Server Tomcat v7.0 Server at localhost failed to start. 报错截图: 原因分析:在使用SSM框架时,生成的mapping与系统配置文件不 ...

  5. eclipse debug启动时tomcat报错

    Class.getDeclaredConstructors0(boolean) line: not available [native method] tomcat  debug启动突然启动不起来 停 ...

  6. 三、SpringBoot启动时JDBC报错:You must configure either the server or JDBC driver (via the serverTimezone configuration property)

    错误提示: Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connectio ...

  7. tomcat 报错处理

    一.tomcat报错找不到资源集市 原因:tomcat的配置文件sever.xml 里的 docbase配置被Eclispe修改了 解决方法:修改回来 <Context docBase=&quo ...

  8. IDEA启动Tomcat报错

    Maven编译成功, 可是启动Tomcat报错: Application Server was not connected before run configuration stop, reason: ...

  9. maven 项目启动tomcat报错 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    maven项目启动tomcat报错: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLi ...

随机推荐

  1. dtd对xml没有起到约束作用

    问题如题. dtd: xml: BUG很明显,但是xml并没有提示错误信息.xml文档校验设置正常. 此处原因: dtd中元素与子元素设置之间缺少空格: 加上空格后正常报错:

  2. Oracle解除表锁定问题

    1.肯定是你同时打开了多个操作页面,要记得关闭多个打开的sql窗口. 2.可以变相删除表,再重新创建一张同名的表来解除表被锁住的问题

  3. CSS BFC学习笔记

    BFC,全称是Block Formatting Context,块级格式化上下文. 详细是什么,能够理解为页面元素的一种特性.触发了BFC的元素往往会产生一些对刚開始学习的人而言意想不到的效果. 触发 ...

  4. poj1699--Best Sequence(dfs+剪枝)

    题目链接:点击打开链接 题目大意:给出n个字符串.要求组合后的串最短 #include <cstdio> #include <cstring> #include <alg ...

  5. mybatis批量插入、批量删除

    mybatis 批量插入 int addBatch(@Param("list")List<CustInfo> list); <insert id="ad ...

  6. java中文件路径读取

    windows下 1)相对路径 public static final String TestDataExcelFilePath="src/omstestdata.xlsx"; 2 ...

  7. java 顺序 读写 Properties 配置文件 支持中文 不乱码

    java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不是顺序读写的. 特从网上查资料,顺序读写的代码,如下, import j ...

  8. java 正则表达式语法

    java 正则表达式语法 标签: 正则表达式javawindowsvbscriptscripting电话 2012-05-20 10:11 6705人阅读 评论(1) 收藏 举报  分类: javaS ...

  9. BZOJ 4241 分块

    思路: 考虑分块 f[i][j]表示从第i块开头到j的最大值 cnt[i][j]表示从第i块开始到序列末尾j出现了多少次 边角余料处理一下就好啦~ //By SiriusRen #include &l ...

  10. Ubuntu14.04下Mongodb数据库可视化工具安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 前期博客 Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐) Ubuntu14.04下Mongodb官网安装部署步骤(图 ...