もなかアイスの試食品

「とりあえずやってみたい」そんな気持ちが先走りすぎて挫折が多い私のメモ書きみたいなものです.

SpringBootで時間が9時間ズレるのを、何とかした話

はじめに

フォームに時刻を入力させる画面があった。

そのデータはタイムゾーン付きでDBに保存していた。

DBからデータを取得してhtmlテンプレートに入れると、時間が9時間ズレていた。

意外とハマったので、その時のお話

ダメだったパターン

Linuxタイムゾーンを弄ってみる

明らかにタイムゾーンの設定がおかしいと思ったので、Linuxタイムゾーンを変更してみた。

cp -p /usr/share/zoneinfo/Japan /etc/localtime

結果効果無し

環境変数を弄ってみる

Tomcatに必要な環境変数が足りてない?と思ったので、以下の環境変数を追加(何処に追加したか忘れた)

LANG=ja_JP.UTC-8
LC_ALL=ja_JP.UTC-8

を追加したけど、ログの一部が日本語化されるだけで、時刻が変わらず。

よく見たらtomcatのログがJSTになっていない

あと、AmazonLinux2で「yum update」でパッケージを更新したら、タイムゾーンの設定が元に戻っていた。

解決

javaに渡すオプションを追加することで解決

↓参考サイト

www.saka-en.com

Tomcatの実行ファイルを「/opt/apache-tomcat-8.5/bin/」に配置し、その中に新規ファイル「setenv.sh」を作成する。

新しく作成したファイル「setenv.sh」に、環境変数JAVA_OPTS」または「CATALINA_OPTS」に以下を定義を追加する。

↓追記

-Duser.timezone=Asia/Tokyo

AmazonLinux(無印)の場合は、「/etc/tomcat8/tomcat8.conf」に環境変数JAVA_OPTS」または「CATALINA_OPTS」を追記する。