热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

spring定时任务执行两次及tomcat部署缓慢问题的解决方法

这篇文章主要给大家介绍了关于spring定时任务执行两次及tomcat部署缓慢问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面小编来一起学习学习吧。

一、spring定时任务执行两次

问题重现和解析

最近使用quartz定时任务框架,结果发现开发环境执行无任何问题,部署到服务器上后,发现同一时间任务执行了多次。经过搜索发现是服务器上tomcat的配置文件出现了问题。

原来的配置文件——server.xml如下:


 


  

一个Host表示一个容器,里面可以包含若干个Context(应用)。上面这段配置文件意思就是:在tomcat中配置了两个容器,一个name=localhost,应用的根目录为webapps,并且会自动解压war包和自动部署。没有指定context,会把根目录下的所有web应用都部署,部署成功后,外网可以通过服务器IP+项目名来访问;另一个name=www.xxx.com,和第一个host不同在于,配置了主页web应用,且不需要跟项目名就可以访问。部署成功后可以通过域名+项目名访问,主页所在项目可以直接通过根域名访问。

这个时候问题就来了,包含定时任务的项目部署在webapps目录下,tomcat中两个独立的容器都部署了一遍,相当于项目在服务器上的tomcat上部署了两次,两边同时会运行定时任务,指定的是同一个数据库。

问题解决

因此,为了尽可能不影响其他项目的正常访问,我做了折中,讲需要执行定时任务的项目单独部署在另一个文件夹中,例如webroot ,然后只使用域名那个host,配置文件修改后如下:


 


  
  
  
  

可以看到projectC是包含定时任务的项目。这样部署成功后,除了该项目只能通过域名访问之外,其余项目的访问方式和之前保持不变。同时问题解决,定时任务只执行一次。

网上的另一种说法

 
  
 

只有一个host,tomcat在启动时,会部署一次根目录下的所有项目,然后Context又会单独部署一次,所以也会导致定时任务执行2次。

对于这种问题,解决的方案也有多种:

  • 将huost的appBase设为空,将Context的Context 指向项目部署位置的绝对路径。
  • 删除Context节点。

二、tomcat部署缓慢的问题

用的阿里云服务器,部署tomcat时速度非常慢,但是后来买的新阿里云又没有这个问题。部署项目后一直会在

INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /opt/apache-tomcat-8.0.15-server/webapps/ROOT

这里卡好几分钟才会继续下去。之前一直以为是服务器配置原因,后来无意中发现是jre的配置原因。参考了几篇博客,发现oracle在WebLogic的文档下Avoiding JVM Delays Caused by Random Number Generation给了原因和解决方案。

The library used for random number generation in Sun's JVM relies on /dev/random by default for UNIX platforms. This can potentially block the WebLogic SIP Server process because on some operating systems /dev/random waits for a certain amount of "noise" to be generated on the host machine before returning a result. Although /dev/random is more secure, BEA recommends using /dev/urandom if the default JVM configuration delays WebLogic SIP Server startup.

意思就是:

  • JVM上产生随机数的策略有两种:/dev/random 和/dev/urandom。
  • tomcat或者WebLogic等web服务器在部署时需要等待若一段随机数产生的时间。unix平台下JVM默认采用的是安全性更好的/dev/random,但是潜在的会阻塞服务进程。
  • 推荐使用/dev/urandom,产生随机数速度快,/dev/random需要时间间隔生成随机数,部署时间长。

修改方式:

  • 打开$JAVA_HOME/jre/lib/security/java.security文件。
  • 将securerandom.source=file:/dev/random 修改为securerandom.source=file:/dev/urandom
  • 重启tomcat,三十秒部署成功,solve it

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


推荐阅读
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • Jedis接口分类详解与应用指南
    本文详细解析了Jedis接口的分类及其应用指南,重点介绍了字符串数据类型(String)的接口功能。作为Redis中最基本的数据存储形式,字符串类型支持多种操作,如设置、获取和更新键值对等,适用于广泛的应用场景。 ... [详细]
  • 如何正确配置与使用日志组件:Log4j、SLF4J及Logback的连接与整合方法
    在当前的软件开发实践中,无论是开源项目还是日常工作中,日志框架都是不可或缺的工具之一。本文详细探讨了如何正确配置与使用Log4j、SLF4J及Logback这三个流行的日志组件,并深入解析了它们之间的连接与整合方法,旨在帮助开发者高效地管理和优化日志记录流程。 ... [详细]
  • Nmap端口检测与网络安全性评估
    Nmap 是一款强大的网络扫描工具,能够高效地进行主机发现、端口扫描和服务识别。它不仅能够检测网络中活跃的主机,还能详细列出这些主机上开放的端口及其对应的服务和版本信息。此外,Nmap 还具备操作系统指纹识别和硬件地址探测功能,为网络安全评估提供了全面的数据支持。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • Django新手指南:第三步——构建你的首个项目
    在本教程中,我们将引导你完成创建第一个Django应用的步骤。通过实际操作,你将逐步了解Django框架的核心概念和基本功能。从项目结构到视图和模板的实现,我们将详细介绍每个环节,帮助你快速上手并构建出一个功能完整的Web应用。 ... [详细]
  • SpringBoot启动脚本详解:BAT文件应用与基础入门指南(SpringBoot系列第1篇)
    如果你还在为SSM框架的复杂搭建过程和繁琐的配置文件而烦恼,那么SpringBoot将是你的一大福音。作为SpringBoot系列的第一篇文章,本文详细介绍了如何使用BAT文件来启动SpringBoot应用,并提供了基础入门指南,帮助开发者快速上手,简化开发流程。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 如何在Linux系统中实施网络流量监测与分析
    本文详细介绍了在Linux系统中实施网络流量监测与分析的方法。通过使用专业的工具和技术,读者可以有效地监控和分析网络流量,从而提高系统的安全性和性能。希望本文能为读者提供有价值的参考和实践指导。 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
author-avatar
jason2502893743
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有