最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring定時(shí)任務(wù)執(zhí)行兩次及tomcat部署緩慢問題的解決方法

 更新時(shí)間:2018年01月29日 09:01:06   作者:Fururur  
這篇文章主要給大家介紹了關(guān)于spring定時(shí)任務(wù)執(zhí)行兩次及tomcat部署緩慢問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面小編來一起學(xué)習(xí)學(xué)習(xí)吧。

一、spring定時(shí)任務(wù)執(zhí)行兩次

問題重現(xiàn)和解析

最近使用quartz定時(shí)任務(wù)框架,結(jié)果發(fā)現(xiàn)開發(fā)環(huán)境執(zhí)行無任何問題,部署到服務(wù)器上后,發(fā)現(xiàn)同一時(shí)間任務(wù)執(zhí)行了多次。經(jīng)過搜索發(fā)現(xiàn)是服務(wù)器上tomcat的配置文件出現(xiàn)了問題。

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

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  prefix="localhost_access_log" suffix=".txt"
  pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
<Host name="www.xxx.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context path="" docBase="/usr/local/tomcat/apache-tomcat-8.5.9/webapps/xxxindex" reloadable="true"></Context> 
</Host>

一個(gè)Host表示一個(gè)容器,里面可以包含若干個(gè)Context(應(yīng)用)。上面這段配置文件意思就是:在tomcat中配置了兩個(gè)容器,一個(gè)name=localhost,應(yīng)用的根目錄為webapps,并且會(huì)自動(dòng)解壓war包和自動(dòng)部署。沒有指定context,會(huì)把根目錄下的所有web應(yīng)用都部署,部署成功后,外網(wǎng)可以通過服務(wù)器IP+項(xiàng)目名來訪問;另一個(gè)name=www.xxx.com,和第一個(gè)host不同在于,配置了主頁web應(yīng)用,且不需要跟項(xiàng)目名就可以訪問。部署成功后可以通過域名+項(xiàng)目名訪問,主頁所在項(xiàng)目可以直接通過根域名訪問。

這個(gè)時(shí)候問題就來了,包含定時(shí)任務(wù)的項(xiàng)目部署在webapps目錄下,tomcat中兩個(gè)獨(dú)立的容器都部署了一遍,相當(dāng)于項(xiàng)目在服務(wù)器上的tomcat上部署了兩次,兩邊同時(shí)會(huì)運(yùn)行定時(shí)任務(wù),指定的是同一個(gè)數(shù)據(jù)庫。

問題解決

因此,為了盡可能不影響其他項(xiàng)目的正常訪問,我做了折中,講需要執(zhí)行定時(shí)任務(wù)的項(xiàng)目單獨(dú)部署在另一個(gè)文件夾中,例如webroot ,然后只使用域名那個(gè)host,配置文件修改后如下:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
   prefix="localhost_access_log" suffix=".txt"
   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
<Host name="www.xxx.com" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context path="" docBase="/usr/local/tomcat/apache-tomcat-8.5.9/webapps/xxxindex" reloadable="true"></Context> 
 <Context path="/projectA" docBase="/usr/local/tomcat/apache-tomcat-8.5.9/webapps/projectA" reloadable="true"></Context> 
 <Context path="/projectB" docBase="/usr/local/tomcat/apache-tomcat-8.5.9/webapps/projectB" reloadable="true"></Context> 
 <Context path="/projectC" docBase="/usr/local/tomcat/apache-tomcat-8.5.9/webroot/projectC" reloadable="true"></Context> 
</Host>

可以看到projectC是包含定時(shí)任務(wù)的項(xiàng)目。這樣部署成功后,除了該項(xiàng)目只能通過域名訪問之外,其余項(xiàng)目的訪問方式和之前保持不變。同時(shí)問題解決,定時(shí)任務(wù)只執(zhí)行一次。

網(wǎng)上的另一種說法

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
 <Context docBase="projectA" path="" reloadable="true" /> 
</Host> 

只有一個(gè)host,tomcat在啟動(dòng)時(shí),會(huì)部署一次根目錄下的所有項(xiàng)目,然后Context又會(huì)單獨(dú)部署一次,所以也會(huì)導(dǎo)致定時(shí)任務(wù)執(zhí)行2次。

對(duì)于這種問題,解決的方案也有多種:

  • 將huost的appBase設(shè)為空,將Context的Context 指向項(xiàng)目部署位置的絕對(duì)路徑。
  • 刪除Context節(jié)點(diǎn)。

二、tomcat部署緩慢的問題

用的阿里云服務(wù)器,部署tomcat時(shí)速度非常慢,但是后來買的新阿里云又沒有這個(gè)問題。部署項(xiàng)目后一直會(huì)在

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

這里卡好幾分鐘才會(huì)繼續(xù)下去。之前一直以為是服務(wù)器配置原因,后來無意中發(fā)現(xiàn)是jre的配置原因。參考了幾篇博客,發(fā)現(xiàn)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上產(chǎn)生隨機(jī)數(shù)的策略有兩種:/dev/random 和/dev/urandom。
  • tomcat或者WebLogic等web服務(wù)器在部署時(shí)需要等待若一段隨機(jī)數(shù)產(chǎn)生的時(shí)間。unix平臺(tái)下JVM默認(rèn)采用的是安全性更好的/dev/random,但是潛在的會(huì)阻塞服務(wù)進(jìn)程。
  • 推薦使用/dev/urandom,產(chǎn)生隨機(jī)數(shù)速度快,/dev/random需要時(shí)間間隔生成隨機(jī)數(shù),部署時(shí)間長。

修改方式:

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Spring Controller接收前端JSON數(shù)據(jù)請(qǐng)求方式

    Spring Controller接收前端JSON數(shù)據(jù)請(qǐng)求方式

    這篇文章主要為大家介紹了Spring Controller接收前端JSON數(shù)據(jù)請(qǐng)求方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • MyBatis-Plus與Druid結(jié)合Dynamic-datasource實(shí)現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例

    MyBatis-Plus與Druid結(jié)合Dynamic-datasource實(shí)現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例

    Dynamic-DataSource 可以和絕大多是連接層插件搭配使用,比如:mybatis,mybatis-plus,hibernate等,本文就來介紹一下MyBatis-Plus與Druid結(jié)合Dynamic-datasource實(shí)現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例,感興趣的可以了解一下
    2023-10-10
  • Java實(shí)現(xiàn)格式化打印慢SQL日志的方法詳解

    Java實(shí)現(xiàn)格式化打印慢SQL日志的方法詳解

    不管我們使用何種語言開發(fā),一旦程序發(fā)生異常,日志是一個(gè)很重要的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)格式化打印慢SQL日志的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • java多線程編程之使用Synchronized關(guān)鍵字同步類方法

    java多線程編程之使用Synchronized關(guān)鍵字同步類方法

    JAVA中要想解決“臟數(shù)據(jù)”的問題,最簡單的方法就是使用synchronized關(guān)鍵字來使run方法同步,看下面的代碼,只要在void和public之間加上synchronized關(guān)鍵字
    2014-01-01
  • Springboot整合logback的詳細(xì)教程

    Springboot整合logback的詳細(xì)教程

    這篇文章主要介紹了Springboot整合logback的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • springboot整合shardingsphere和seata實(shí)現(xiàn)分布式事務(wù)的實(shí)踐

    springboot整合shardingsphere和seata實(shí)現(xiàn)分布式事務(wù)的實(shí)踐

    本文主要介紹了springboot整合shardingsphere和seata實(shí)現(xiàn)分布式事務(wù)的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • win10安裝rabbitMQ的詳細(xì)步驟

    win10安裝rabbitMQ的詳細(xì)步驟

    RabbitMQ是一個(gè)開源的消息中間件(Message Broker),它基于AMQP協(xié)議設(shè)計(jì),用于在分布式系統(tǒng)中實(shí)現(xiàn)消息的高效、可靠傳輸,本文給打擊介紹了win10安裝rabbitMQ的詳細(xì)步驟,文中通過圖文講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Java編程中隨機(jī)數(shù)的生成方式總結(jié)

    Java編程中隨機(jī)數(shù)的生成方式總結(jié)

    在Java中利用自帶的類庫可以有三種途徑可以產(chǎn)生隨機(jī)數(shù),這里我們舉了一些簡單的例子來進(jìn)行Java編程中隨機(jī)數(shù)的生成方式總結(jié),需要的朋友可以參考下
    2016-05-05
  • Vue實(shí)現(xiàn)驗(yàn)證碼登錄的超詳細(xì)步驟

    Vue實(shí)現(xiàn)驗(yàn)證碼登錄的超詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)驗(yàn)證碼登錄的超詳細(xì)步驟,我們?cè)谑褂胿ue進(jìn)行前端開發(fā)時(shí)都需要登錄驗(yàn)證,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • spring循環(huán)注入異常問題的解決方案

    spring循環(huán)注入異常問題的解決方案

    今天小編就為大家分享一篇關(guān)于spring循環(huán)注入異常問題的解決方案,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評(píng)論

出国| 和龙市| 格尔木市| 武宁县| 浮梁县| 齐齐哈尔市| 朝阳市| 搜索| 石林| 砚山县| 磐安县| 武夷山市| 洮南市| 江达县| 宜州市| 昌乐县| 正安县| 东阿县| 四平市| 姚安县| 盱眙县| 临沧市| 健康| 阿拉善右旗| 西乡县| 芮城县| 罗甸县| 白银市| 平原县| 富阳市| 肇源县| 福清市| 汉源县| 怀远县| 渝北区| 贵定县| 南丰县| 普陀区| 裕民县| 瓮安县| 济宁市|