Spring Boot キャンプ予習メモ

この記事について

3月25日(水)、JJUGナイトセミナーの「Spring Bootキャンプ」に参加してきます。
【東京】JJUG ナイト・セミナー「中上級者向け!Spring Bootハンズオン!」3/25(水)開催 | 日本Javaユーザーグループ
予習必須の勉強会なので、予習しててハマったことをメモしときます。
手順はこちら→making/spring-boot-camp-instruction · GitHub

かかった時間

恥ずかしながら、コードをコピペして実行するだけで、3日間で計5~6時間かかりました・・・(^^;
とにかく動かすというところまで出来れば、ハンズオン当日は内容の理解や、さらに試してみたいこと等に集中できるので、予習は出来る限りやっておいたほうがいいと思います。
この記事が参考になれば幸いです。

環境設定など

必要なものはこちら。
spring-boot-camp-instruction/index.rst at master · making/spring-boot-camp-instruction · GitHub
僕の場合は、Windows 7 x64JDK 8u31、IntelliJ IDEA 14.1 EAPMaven 3.2.3、CURL 7.33.0です。

第1章 Spring BootでHello World

特にハマりどころは無いと思います。

第2章 OpenCV

ちょっとハマりました。
原因は、プロジェクトを置いているパスでした。パスには日本語・半角スペースは入れない方がいいです。
(追記:半角スペースはOKでした。日本語が入ってるとダメです)
最初は日本語・半角スペースがパスに入っていたので、出力が「Image = null」になったり、レナの画像にDukeが出てこなかったりしました。
あと、実行時にWARNINGが出てきて気になったたので、pom.xmlを少し修正しました。

    <!-- 38行目以降 -->
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
                <!-- コレを追記 -->
                <version>3.2</version>
            </plugin>
        </plugins>
    </build>

第3章 顔変換サービス

CURLコマンド

下記のコマンドは、画像ファイルが置いてあるディレクトリをカレントとしてから実行してください。
(src/main/resourcesなど)

curl -v -F file=@lena.png http://localhost:8080/duker > after.png

コマンド実行後は、そのカレントディレクトリに画像が生成されます。

「file=@lena.png」の部分をシングルクオテーションで囲むと、レスポンスで「couldn't open file "lena.png'"」と出てきたので、シングルクオテーションは付けませんでした。
これは、僕がIntelliJ IDEAのTerminalや、Windowsコマンドプロンプトを使っているためです。
Git Bashの場合は、シングルクオテーションは有っても無くても大丈夫でした。

上記のコマンドでうまくいかない場合は、下記のどちらかを試してみてください。

curl -v -F file=@lena.png http://localhost:8080/duker.png > after.png

curl -v -F file=@lena.png;type=image/png http://localhost:8080/duker > after.png


(追記:2つ目のコマンドは、再確認したら実行できませんでした。お詫びして訂正します)

アップロードする画像と生成する画像は、形式を同じにしないと例外が発生することがあります。
発生しないで正しく画像が生成されることもあるし、ここはよく分かりません(^^;

curl -v -F file=@lena.png http://localhost:8080/duker > after.jpg

画像が生成されない

アプリをシャットダウンしないと、after.pngが生成されないことがありました。
(ファイルは出来るが0KB、またはファイルそのものが生成されない)
アプリをシャットダウンすると、画像が正しく生成されました。

恐らくBufferedImageがフラッシュされてないからだと考えて、Appクラスのduker()メソッドで、imageをreturnする直前に「image.flush()」を入れたらいけました。

と思いきや、1回 image.flush()を書いて実行したら、2回目以降はimage.flush()をコメントアウトしても大丈夫(=アプリをシャットダウンしなくても画像が生成される)になりました。
リビルドもしたし、CLASSファイル消去してからビルドもしたし、ここもよく分かりません・・・。

第4章 JMSの導入

HornetQの導入や起動自体には、ハマったところはありませんでした。
最後に、CURLコマンドを10回連続で叩くコマンドがあるんですが、

$ for i in `seq 1 10`;do curl localhost:8080/send?msg=test;done

これはbashコマンドなので、Windowsコマンドだとこうなります。

> for /L %i in (1,1,10) do (curl localhost:8080/send?msg=test)

第5章 JMSで非同期処理

特にハマりどころは無かったですが、僕の環境だと、JVMのハングアップは起きませんでした。
ただ、第3章と同様、コマンドはシングルクオテーション無しで。

curl -F file=@lena.png localhost:8080/queue

第6章 STOMPの導入

特にハマりどころはありませんでした。

第7章 STOMP over WebSocket

import文が記載されていませんが、Base64クラスは「java.util.Base64」のようです。

第8章 WebRTC

特にハマりどころはありませんでした。

第9章 WebRTC+顔変換サービス

特にハマりどころはありませんでした。

第10章以降

Dockerのインストールしてないので、やってません。

以上です。