


jenkinsによってデプロイされたWEBアプリが
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
を吐き出してあれこれやったので一言。
残念ながらログをどっかやってしまったが、
「0ms前にパケットは送ることに成功したけど、返答が無い。」
みたいなスタックトレースが出ていた。
TOMCATにデプロイされているリソースファイルがどうやらおかしい。
リソースフォルダにローカル向けの開発用リソース
が乗っけられている。
それを読み込んだせいで、
本来はDBサーバを参照しているはずが、
存在しないlocalhostのDBを参照しているのだから返答が無いのは当たり前である。
mavenのゴールの設定がおかしいのかな?
と思ったが違う。
結局、
pom.xmlのリソースディレクトリの記述順によるものだった。
/src/main/resources/resource.xml(local用)
/src/product/resources/resource.xml(product用)
が存在し、
profile「product」に記述したリソースディレクトリの記述はこうなっていた。
<profile>
<id>product</id>
・
・
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/product/resources</directory>
</resource>
</resources>
・
・
</profile>
クリーンするとローカル環境では問題なくlocal用リソースが使われていたこともあり、
clean package -P productを行えば、product用リソースが使われると思っていた。
記述を以下のように変えた。ひっくり返しただけ。
<profile>
<id>product</id>
・
・
<resources>
<resource>
<directory>src/product/resources</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
・
・
</profile>
にしたら望みどおりのパッケージングになった。
この記事を書いている途中、懐疑的になって確認してみたが、やっぱりこうすると直る。
同名ファイルが存在した場合のpom.xmlの解析とMavenの挙動を細かく気にしてなかったので結構詰まった。
tomcatがビルドしたてのwarをデプロイ出来てないだけか?とか、
コネクタのバージョンが間違ってるのか?とか、
そもそもリソースファイル自体に問題があるのか?とか、
DBサーバーの権限・IP関係が間違ってるのか?とか、
色々模索した。
直接的な原因はDBにあると思ったら勘違い。
しかし・・根本的な解決になってない感が半端無い・・・