1.スプリングタイミングのタスクが2回実行されます
繁殖と分析の問題
最近、私はQuartzタイミングタスクフレームワークを使用しましたが、開発環境の実行に問題はないことがわかりました。サーバーに展開した後、タスクが同時に複数回実行されることがわかりました。検索後、サーバー上のTomcat構成ファイルに問題があることがわかりました。
元の構成ファイル-server.xmlは次のとおりです。
<ホスト名= "localhost" appbase = "webapps" unpackwars = "true" autodeploy = "true"> <valve classname = "org.apache.catalina.valves.accesslogvalve" directory = "logs" logs "freix =" localhost_access_log " /> </host> <host name = "www.xxx.com" appbase = "webapps" unpackwars = "true" autodeploy = "true" xmlvalidation = "false" xmlnamespaceaware = "false"> <context path = "docbase ="/usr/local/tomcat/xxxdex " reloadable = "true"> </context> </host>
ホストは、いくつかのコンテキスト(アプリケーション)を含むことができるコンテナを表します。上記の構成ファイルは次のことを意味します。2つのコンテナがTomcatで構成されています。1つのname = localhost、アプリケーションのルートディレクトリはWebAppsであり、WARパッケージは自動的に解凍され、自動的に展開されます。コンテキストが指定されていない場合、ルートディレクトリ内のすべてのWebアプリケーションが展開されます。展開が成功した後、外部ネットワークにサーバーIP +プロジェクト名を介してアクセスできます。他の名前= www.xxx.comは、最初のホストとは異なり、ホームページWebアプリケーションで構成されており、プロジェクト名でアクセスする必要はありません。展開が成功した後、ドメイン名 +プロジェクト名を介してアクセスでき、ホームページが配置されているプロジェクトにはルートドメイン名を介して直接アクセスできます。
この時点で、問題が発生します。タイミングタスクを含むプロジェクトは、WebAppsディレクトリに展開されます。 Tomcatの2つの独立したコンテナが1回展開されます。これは、サーバー上のTomcatに2回展開されるプロジェクトと同等です。双方はタイミングタスクを同時に実行し、同じデータベースが指定されます。
問題解決
したがって、できる限り他のプロジェクトの通常のアクセスに影響を与えないために、私は妥協を行い、タイミングタスクを実行する必要があるプロジェクトは、Webrootなどの別のフォルダーに個別に展開され、ドメイン名ホストのみを使用すると述べました。構成ファイルが変更された後、以下は次のとおりです。
<ホスト名= "localhost" appbase = "webapps" unpackwars = "true" autodeploy = "true"> <valve classname = "org.apache.catalina.valves.accesslogvalve" directory = "logs" logs "freix =" localhost_access_log " /> </host> <host name = "www.xxx.com" appbase = "" unpackwars = "true" autodeploy = "true" xmlvalidation = "false" fals "xmlnamespaceaware =" false "> <context path =" docbase = "/usr/local/tomcat/apachetomcat-8.5.9/web apps" reloadable = "true"> </context> <context path = "/projecta" docbase = "/usr/local/tomcat/apache-tomcat-8.5.9/webapps/projecta" reloadable = "true"> </context path = "/projectb" docbase = "/usr/usr/usr/tomcat/apache-tomcat-8.9/webbs" reloadable = "true"> </context> <context path = "/projectc" docbase = "/usr/local/tomcat/apache-tomcat-8.5.9/webroot/projectc" reloadable = "true"> </context> </host>
ProjectCは、タイミングタスクを含むプロジェクトであることがわかります。展開が成功した後、ドメイン名を介してのみアクセスできるプロジェクトを除き、他のプロジェクトのアクセス方法は以前から変更されません。同時に、問題は解決され、タイミングタスクは1回だけ実行されます。
オンラインで別のことわざ
<host name = "localhost" appbase = "webapps" unpackwars = "true" autodeploy = "true"> <context docbase = "" reloadable = "true" /> < /host>
ホストは1つだけです。 Tomcatが開始されると、ルートディレクトリ内のすべてのプロジェクトが1回展開され、コンテキストが再び展開され、タイミングタスクが2回実行されます。
この問題には多くの解決策があります。
2。ゆっくりとしたTomcatの展開の問題
私が使用したAlibaba Cloudサーバーは、Tomcatを展開する際に非常に遅かったが、後で購入した新しいAlibabaクラウドはこの問題を抱えていませんでした。プロジェクトが展開された後、そうなります
info [localhost-startstop-1] org.apache.catalina.startup.hostconfig.deploydirectory Webアプリケーションディレクトリの展開/opt/apache-tomcat-8.0.0.15-server/webapps/root
ここを続けるには数分かかります。以前はサーバー構成の理由だと思っていましたが、後で誤ってJRE構成の理由であることを発見しました。いくつかのブログを参照した後、私はOracleがWeblogicのドキュメントの下で理由と解決策を与えていることを発見しました。
SunのJVMの乱数生成に使用されるライブラリは、UNIXプラットフォームにデフォルトで /DEV /ランダムに依存しています。一部のオペレーティングシステム /DEV /ランダムでは、結果を返す前にホストマシンで生成されるのが一定の「ノイズ」が生成されるため、これによりWebLogic SIPサーバープロセスがブロックされる可能性があります。 /dev /ランダムはより安全ですが、Beaは、デフォルトのJVM構成がWebLogic SIP Serverの起動を遅延させる場合、 /dev /urandomを使用することをお勧めします。
意味:
変更方法:
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。