Spring Bootでapplication.propertiesに定義した独自の値を読み取る方法

Spring Bootで、application.propertiesには色々な魔法のキーワードを打ち込むけど、独自にキーと値を設定することも出来る。

んで、このapplication.propertiesに設定した値が読めなくて2時間ほどハマった。
日本語の資料を探そうとして見つからず、リソースリーダーとか触りだしてハマった。

こういうときは素直に英語でググりましょう。
Spring Boot application.properties read っと。
初っ端からヒットしました。

How to access a value defined in the application.properties file in Spring Boot
https://stackoverflow.com/questions/30528255/how-to-access-a-value-defined-in-the-application-properties-file-in-spring-boot

application.propertiesで下記のよう記載した場合、

userBucket.path=${HOME}/bucket

クラスでは下記のようにコーディングする。

@Value("${userBucket.path}")
private String userBucketPath;

 

さすが、StackOverFlowでした。

 

JavaでSimpleDateFormatで英単語の月や曜日をparseしてハマった話

HTTPのlast-modifiedは下記のような書式で提供される。
“Fri, 31 Mar 2017 13:32:24 GMT”

これをSimpleDateFormatでパースするには下記のフォーマットで出来る。
“EEE, dd MMM yyyy HH:mm:ss zzz”

…はずだった。
何故か、パースしてもjava.text.ParseException例外が発生するため、1時間以上悩んだ。

結果、下記のようにロケールを指定する必要があるらしい。

SimpleDateFormat format= new SimpleDateFormat(dateFormat, Locale.ENGLISH);

知らんがなwww
この情報は下記のサイトで入手しました。

SimpleDateFormatクラスparseメソッドのLocaleに注意

 

最近、作業が停滞しがちだなー。

Loxsols HTML翻訳サービスをリリースしました.

Loxsols HTML翻訳サービスをリリースしました.

Loxsols HTML翻訳サービス

Loxsols HTML翻訳サービスは、指定したURLのサイトをHTMLの構造を保ったまま翻訳するサービスです。
翻訳エンジンは、Microsoft Translator テキスト APIを使用しています。

APIの呼び出しに時間がかかるため、Wikiepediaのような文量の多いサイトでは翻訳に数分程度かかります。

loxsols-html-translation-service html-translation-sample-src-001 html-translation-sample-dst-001

 

Spring Bootのwarファイルがtomcat 6で動かない件

これのせいで1日はまった。

Spring Bootでwarファイルをパッケージングしてアプリケーション・サーバーにデプロイして運用したいとする。
何故か、tomcat 6では動作しなくて、tomcat 8だと動作する。

[だめだった環境]
・JDK 1.7
・Tomcat 6.0.51
・Spring Boot 1.5.4
※ この環境では幾ら設定をいじっても、HTTP 404しか表示されない。
tomcatのログにも何がしかの情報が表示されないので本当に困った。

[動いた環境]
・JDK 1.7
・Tomcat 8.5.16
・Spring Boot 1.5.4

webappディレクトリにwarファイルを置いておくとtomcatの起動時に以下のAAが表示される。

.   ____          _            __ _ _
/\\ / ___’_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | ‘_ | ‘_| | ‘_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
‘  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v1.5.4.RELEASE)
結論:Spring Bootはtomcat 8と組み合わせて使いましょう。間違ってもtomcat 6は駄目です。

JDKを1.6から1.7に上げたら、apache-tomcat-6.0.45が動かなくなった話

apache-tomcat-6.0.45が動かなくなった。
startup.batを呼んでもすぐに終了する。
ログにも何も出ない。

いろいろ試したが、ログも出ないし八方塞がりかと思いきや、最近JDKを1.6から1.7に上げたのを思い出した。
しかも、筆者の運用している本番環境は以下の組み合わせ。
・JDK 1.7
・apache-tomcat-6.0.51

早速、apache-tomcat-6.0.51を下記のサイトから入手した。

Index of /dist/tomcat/tomcat-6/v6.0.51/bin
https://archive.apache.org/dist/tomcat/tomcat-6/v6.0.51/bin/

結果….問題なく動くしwww
古いJDK使ってて動かなくなるならわかるけど、新しいJDKに変えると動かなくなるとか、なかなか地雷だね。

Spring Bootで返却するHTMLファイルが文字化けする場合

Spring Bootは楽しい。でもよくハマる。

今日は、Spring Bootで@GetMappingアノテーションをつけたメソッドが返却するHTMLが文字化けする場合の対処法について。

結論から言うと、筆者の場合、下記の設定をすれば解決した。
@GetMapping(path = “/translate-html”, produces=”text/html;charset=UTF-8″)

この情報は下記のサイトを参考にした。
このサイトの管理人には本当に感謝です。

本当に苦労したSpringでの文字化け問題
http://d.hatena.ne.jp/graySpace/20140406/1396756991

 

それにしても、わざわざUTF-8つけないとレスポンスが文字化けするとか、
Spring Bootは一体何のコードを想定して作られているのだろうか。

 

Mavenでsystemで参照する自作jarファイルをwarにpackageする場合

Mavenで自作のjarファイルをpom.xmlに記載するときに、普通ならリポジトリにjarを登録して、自動DLが走るようにするんだけど、
これが面倒なときはsystemでファイル参照させるやり方もある。

例えばこんな感じ。
<dependency>
<groupId>org.loxsols.webapi.client</groupId>
<artifactId>loxsols-webapi-client</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/loxsols-webapi-client.jar</systemPath>
</dependency>

 

しかし、この方法だと何故かmvn packageした際にwarファイルに、systemで導入したjarファイルが含まれない。
この辺の解決策をいろいろ調べた結果以下のサイトに行き着く。

Mavenでローカルに存在するjarをパッケージしてみる
http://nemuzuka.hatenablog.com/entry/20090109/1231486987

 

spring bootのpom.xmlなら下記を記載すればよい。

<!– 追記箇所 ここから –>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>compile</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
<configuration>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory>
</configuration>
</plugin>
<!– 追記箇所 ここまで –>