问题:

启动tomcat时,catalina.out日志打印到如下内容就停止不动了,也不报错

SEVERE: FarmWarDeployer can only work as host cluster subelement!
Dec 02, 2016 4:27:39 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /app/apache-tomcat-7.0.73/webapps/ROOT.war
Dec 02, 2016 4:27:43 PM org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

根本原因是Jar包检查TLD标签没有通过,解决办法是删除 conf/catalina.properties中的部分内容

org.apache.catalina.startup.TldConfig.jarsToSkip=XXX.jar,XXXX.jar

修改为如下:

org.apache.catalina.startup.TldConfig.jarsToSkip=

具体处理步骤:

1.调整Tomcat对应类的log级别

修改${tomcat}/conf/log4j.properties

  1. ##解除类org.apache.jasper.compiler.TldLocationsCache的log
  2. org.apache.jasper.compiler.TldLocationsCache.level = FINE

 2.观察Tomcat日志打印信息

步骤1执行完后,重启Tomcat,观察Tomcat日志,会在日志中发现类似如下打印信息:

  1. 九月 09, 2013 10:55:37 上午 org.apache.jasper.compiler.TldLocationsCache tldScanJar
  2. 详细: No TLD files were found in [file:/E:/devspace/xxt_login/WEB-INF/lib/json-lib-2.3-jdk15.jar]. Consider adding the JAR to the tomcat.util.scan.DefaultJarScanner.jarsToSkip or org.apache.catalina.startup.TldConfig.jarsToSkip property in CATALINA_BASE/conf/catalina.properties file.
  3. 九月 09, 2013 10:55:37 上午 org.apache.jasper.compiler.TldLocationsCache tldScanJar
  4. 详细: No TLD files were found in [file:/E:/devspace/xxt_login/WEB-INF/lib/poi-3.8.jar]. Consider adding the JAR to the tomcat.util.scan.DefaultJarScanner.jarsToSkip or org.apache.catalina.startup.TldConfig.jarsToSkip property in CATALINA_BASE/conf/catalina.properties file.

3.调整${tomcat}/conf/catalina.properties,将提示的jar添加到不扫描清单中

  1. tomcat.util.scan.DefaultJarScanner.jarsToSkip=\
  2. bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\
  3. annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,\
  4. catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,\
  5. jasper.jar,jasper-el.jar,ecj-*.jar,\
  6. tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,\
  7. tomcat-jni.jar,tomcat-spdy.jar,\
  8. tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\
  9. tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\
  10. tomcat-jdbc.jar,\
  11. tools.jar,\
  12. commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,\
  13. commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,\
  14. commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,\
  15. commons-math*.jar,commons-pool*.jar,\
  16. jstl.jar,\
  17. geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\
  18. ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\
  19. jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,\
  20. xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\
  21. junit.jar,junit-*.jar,ant-launcher.jar,\
  22. json-lib-*.jar,poi-*.jar

【注意】

1.如果使用eclipse server插件、Sysdeo tomcat插件启动Tomcat,此配合可能无效

2.步骤1调整完后,最好清除下以下两个文件夹${tomcat}/conf/Catalina ${tomcat}/work/Catalina

3.尽量使用*号实现模式匹配,以避免因jar版本升级带来的重复修改代价

原因

Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,这里花去了342秒,也即接近6分钟。

SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器。

在SHA1PRNG中,有一个种子产生器,它根据配置执行各种操作。

1)如果java.security.egd属性或securerandom.source属性指定的是”file:/dev/random”或”file:/dev/urandom”,那么JVM会使用本地种子产生器NativeSeedGenerator,它会调用super()方法,即调用SeedGenerator.URLSeedGenerator(/dev/random)方法进行初始化。

2)如果java.security.egd属性或securerandom.source属性指定的是其它已存在的URL,那么会调用SeedGenerator.URLSeedGenerator(url)方法进行初始化。

这就是为什么我们设置值为”file:///dev/urandom”或者值为”file:/./dev/random”都会起作用的原因。

在这个实现中,产生器会评估熵池(entropy pool)中的噪声数量。随机数是从熵池中进行创建的。当读操作时,/dev/random设备会只返回熵池中噪声的随机字节。/dev/random非常适合那些需要非常高质量随机性的场景,比如一次性的支付或生成密钥的场景。

当熵池为空时,来自/dev/random的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。

那么什么是环境噪声?

随机数产生器会手机来自设备驱动器和其它源的环境噪声数据,并放入熵池中。产生器会评估熵池中的噪声数据的数量。当熵池为空时,这个噪声数据的收集是比较花时间的。这就意味着,Tomcat在生产环境中使用熵池时,会被阻塞较长的时间。

解决

有两种解决办法:

1)在Tomcat环境中解决

可以通过配置JRE使用非阻塞的Entropy Source。

在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。

加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。

2)在JVM环境中解决

打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:

securerandom.source=file:/dev/urandom
  • 1
  • 2

替换成

securerandom.source=file:/dev/./urandom

第一种:严格遵守java规范,修改对象的属性名称,要求不包含java关键字; 
第二种:修改EL表达式,例如"${owner.new}"可以修改为"${owner['new']}"; 
第三种:修改tomcat属性,忽略对EL表达式的关键字检查。修改$CATALINA_BASE/conf/catalina.properties文件,添加org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true选项。

第四种:参照:http://blog.csdn.net/yasi_xi/article/details/49642661关于这个的处理

通过上面五种方式处理过后还是报同样的错误,就开始尝试替换tomcat版本。也尝试更换tomcat的默认目录,也考虑过项目在打包成war之前项目是不是有断点。这些排除之后还是一样报错。到这里几乎已经快放弃了。但是后来想了想有没有可能是数据库的问题呢?(经过验证就是数据库的问题)

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received

最后问题解决

其实就是一个数据库的映射端口的问题,Linux服务器将3306的端口对外映射成了13306,而我的数据库连接URL中还是用的这个13306这个端口。项目部署到Linux服务器后这个端口应该改成3306即可。

Tomcat启动log打印到INFO: At least one JAR was scanned for TLDs yet contained no TLD各种解决方式的更多相关文章

  1. Tomcat7启动log打印到INFO: At least one JAR was scanned for TLDs yet contained no TLDs.就停止不动了

    环境: RHEL7,tomcat7.0.70 问题: 启动tomcat时,catalina.out日志打印到如下内容就停止不动了,也不报错 SEVERE: FarmWarDeployer can on ...

  2. tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.

    部署项目时候,发现启动特别慢,要等好几分钟,这不正常啊.然后每次部署都停留在 At least one JAR was scanned for TLDs yet contained no TLDs. ...

  3. 阿里云服务器,tomcat启动,一直卡在At least one JAR was scanned for TLDs yet contained no TLDs就不动了

    项目在本地是可以成功运行的,网上看到一堆各式各样的解决办法感觉都不适合我,于是绝望的删webapps,重新上传,一直不行. 重复了第3次还是第4次,居然就好了,这是什么操作.

  4. Tomcat 8启动速度慢原因1: At least one JAR was scanned for TLDs yet contained no TLDs

    最近使用tomcat8启动项目时,发现At least one JAR was scanned for TLDs yet contained no TLDs这一步加载时间非常长, 从网上收集了各种资料 ...

  5. Tomcat启动慢原因之一 At least one JAR was scanned for TLDs yet contained no TLDs

    Tomcat启动时提示: 信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging f ...

  6. tomcat 启动时遇到org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs

    当发生这样的错误的时候 org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet ...

  7. [转]完美解决)Tomcat启动提示At least one JAR was scanned for TLDs yet contained no TLDs

    一.文章前言    本文是亲测有效解决At least one JAR was scanned for TLDs yet contained no TLDs问题,绝对不是为了积分随便粘贴复制然后压根都 ...

  8. tomcat启动卡在了 At least one JAR was scanned for TLDs yet contained no TLDs 的根本原因与解决办法

    1.前言 有时候服务器开启时启动不了,卡在了 org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned fo ...

  9. Tomcat:At least one JAR was scanned for TLDs yet contained no TLDs

    启动Tomcat的时候,经常见到这样的BUG:   14-Apr-2019 13:53:25.198 信息 [localhost-startStop-1] org.apache.jasper.serv ...

随机推荐

  1. BI生态圈常用端口使用配置总结

    Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着Hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集记录如 ...

  2. 【linux】sed -e 's/-//g'

    sed是用来处理文本的 s/正则表达式/替换字符串/    :表示将正则表达式的内容替换为后面的字符串 g    :表示替换全部,即如果不加g,则只会替换第一个 -e    :多点编辑(这个没懂) 例 ...

  3. Windows下RabbitMQ安装及配置

    下载rabbitmq_server以及Erlang OTP平台 安装好了启动服务就行了 也可用命令 net start RabbitMQ  或  net stop RabbitMQ 配置用户添加环境变 ...

  4. Nwjs开发桌面应用

    使用Nwjs开发桌面应用体验 https://www.cnblogs.com/zhupengfei/p/8906131.html 之前一直用.net开发桌面应用,最近由于公司需要转为nodejs,但也 ...

  5. MySQL 实现将一个库表里面的数据实时更新到另一个库表里面

    MySQL 实现将一个库表里面的数据实时更新到另一个库表里面 需求描述:MySQL 里面有很多的数据库,这些数据库里面都有同一种表结构的表 (tb_warn_log),这张表的数据是实时更新的,现在需 ...

  6. 使用ApiPost测试接口时需要先登录怎么办?利用Cookie模拟登陆!

    ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试.管理工具.它支持模拟POST.GET.PUT等常见请求,是后台接口开发者或前端.接口测试人员不可多得的工具 . 下 ...

  7. SmartSVN11 Mac版 注册码序列号

    Name=apipostAddress=1337 iNViSiBLE Str.Email=3257132998@qq.comFreeUpdatesUntil=2099-09-26LicenseCoun ...

  8. 【拓扑排序】BZOJ4010-[HNOI2015]菜肴制作

    [题目大意] 是要求N个点的一个拓扑序,且满足以下条件:编号1的位置尽可能靠前,在满足所有限制,编号2的位置尽可能靠前,以此类推. [思路] 一开始觉得优先队列维护一下拓扑就好了.然而样例告诉我们是不 ...

  9. 如何用dat批处理文件关闭某端口对应程序-Windows自动化命令

    如何用dat批处理文件关闭某端口对应程序? 网上找到的大部分都是手动操作,第一步先查出端口,第二步在根据上一步查到的端口手动去关闭进程.但我的需求不是这样的,我需要全自动处理.用于 dubbo 服务进 ...

  10. CentOS 7 yum 安装subversion

    yum list installed | grep subversionyum install subversioncd /var/wwwsvn -hsvn co svn://121.196.226. ...