特定環境で、logbackのログ時間がUTCになってしまったので、デフォルトタイムゾーンを指定しました。すると、DB接続時に以下のようなエラーが。
2015-08-30 18:45:52,997 [http-nio-127.0.0.1-8080-exec-1] ERROR o.apache.tomcat.jdbc.pool.ConnectionPool - Unable to create initial connections of pool
org.postgresql.util.PSQLException: FATAL: invalid value for parameter "TimeZone": "JST"
at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl
at org.postgresql.core.ConnectionFactory.openConnection
デフォルトタイムゾーンをJSTとすると、PostgreSQLサーバから拒否されるようです。
PostgreSQLのserverlogには以下が出力されれていました。
FATAL: invalid value for parameter "TimeZone": "JST"
システムプロパティとして設定する方法-Duser.timezone=JST
と、Javaから設定する方法TimeZone.setDefault(TimeZone.getTimeZone("JST"));
の両方で発生しました。
指定しない場合や、UTCを指定する場合は発生しません。
PostgreSQLのTimeZoneにJSTが存在しないためです。
$ls /usr/local/pgsql/share/timezone/
Africa CET Egypt GMT+0 Iran MST7MDT Poland UTC
America CST6CDT Eire GMT-0 Israel Mexico Portugal Universal
Antarctica Canada Etc GMT0 Jamaica NZ ROC W-SU
Arctic Chile Europe Greenwich Japan NZ-CHAT ROK WET
Asia Cuba Factory HST Kwajalein Navajo Singapore Zulu
Atlantic EET GB Hongkong Libya PRC Turkey posixrules
Australia EST GB-Eire Iceland MET PST8PDT UCT
Brazil EST5EDT GMT Indian MST Pacific US
JapanやAsia/Tokyoはあります。実際、user.timezone=Japan
の場合は発生しません。
上記のように存在するtimezoneを指定する方法と、cp -p Japan JST
してしまう方法があります。後者の場合、PostgreSQLの再起動は不要です。