Javaプロジェクト時間とサーバ時間が同期していない問題の解決


問題の説明
  • Jarパッケージでサーバで直接実行するSpringBootプロジェクトで取得したタイムスタンプは、現在の時間より12時間1遅く、システム時間に問題はありません.
  • dockerミラーで実行するSpringBootプロジェクトが取得するタイムスタンプは、現在の時間より8時間遅く、この問題は、問題1を解決したサーバ上の
  • に発生します.
    問題1
    データベースのタイムゾーンとデータベースの接続構成の表示
    sqlを使用してデータベースの現在時刻select now();をクエリーすると、現在時刻であることがわかります.問題がなく、データベース接続プロパティを表示しますか?useUnicode=true&characterEncoding=UTF-8*&serverTimezone=UTC**タイムゾーン設定
    サーバシステム時間の表示dateコマンドを使用して、表示時間:2019年10月11日金曜日10:12:22 CST使用date -R表示時間タイムリーエリア:Fri,11 Oct 2019 10:14:22+0800
    サーバーのハードウェア時間の表示sudo hwclock --showを使用してサーバーのハードウェア時間を表示します.2019-10-11 10:16:36.554545+0800
    プロジェクトログを見ると、プロジェクトログの時間も間違っていて、現在の時間より12時間遅いことがわかります.
    インターネットを通じて資料を調べて、位置付けはJVMの問題です
    まず見つけた方法はjarパケットを起動するコマンドにタイムゾーンパラメータjava -jar -Duser.timezone=GMT+08 xxx.jarを追加することですが、これは一時的な解決策で、起動するたびにタイムゾーンパラメータを追加する必要があり、面倒なので、次のような一労永逸な方法を探しました.実際に実行する場合、これらのコマンドは管理者権限を使用して実行する必要があります.前にsudoを追加すればいいです.1.編集時間プロファイルsudo vim /etc/sysconfig/clock ZONE=「Asia/shanghai」UTC=false#をfalseに設定します.ハードウェアクロックがutc時間に一致しないARC=false 2.linuxのタイムゾーンは上海タイムゾーンsudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 3.アライメント時間sudo ntpdate cn.pool.ntp.org 4.ハードウェア時間とシステム時間が一致し、sudo /sbin/hwclock --systohcをキャリブレーションして正常にプロジェクトを再起動すればよい
    問題2
    ローカルテストでは、データベースに挿入されたデータタイムスタンプに問題がないことがわかりました.問題1のチェックがあったので、直接プロジェクトログを見てみると、時間が確かに間違っていましたが、状況は違います.このプロジェクトは問題1が発生したプロジェクトと同じサーバーにあるので、dockerミラーで実行されています.
    他のネット上で言うホスト時間を同期する方法はすべて試したことがあって、私のこのような情況に対して適用しません
    最後に、docker起動時にパラメータを追加してタイムゾーンを指定すればいいというネットユーザーのアドバイスを採用しました.-d-e TZ=「Asia/shanghai」-v/etc/localtime:/etc/localtime:ro如:docker run -d -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro -e PARAMS="spring.profiles.active=test" --name commonSecurity -p 9000:8080 -v /home/dataexa/insight-microservice/commonSecurity:/usr/local/tomcat/webapps/ROOT -d tomcatステップ1:docker ps実行中のdockerミラーを表示するステップ2:ミラーを閉じるまたは削除ミラーを閉じるdocker stop idミラーを削除するステップdocker rm -f ミラーを削除するステップ3:名前を使用してミラーをパブリッシュし、プロジェクトwarパッケージの解凍後のWEB-INF下のclassesディレクトリの下でプロジェクト起動コマンドdocker run -d -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro -e PARAMS="spring.profiles.active=test" --name commonSecurity -p 9000:8080 -v /home/dataexa/insight-microservice/commonSecurity:/usr/local/tomcat/webapps/ROOT -d tomcatを実行する
    参考記事:https://blog.csdn.net/fullbug/article/details/78619701