かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その59 )( Windows で本番稼働させるためのディレクトリ作成、jar ファイル配置、bat ファイル作成、サービス登録、動作確認 )

概要

Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その58 )( セッションに値をセットする・取り出す処理を実装する ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Windows で本番稼働させるためのディレクトリ作成、jar ファイル配置、bat ファイル作成、サービス登録、動作確認。

参照したサイト・書籍

目次

  1. feature/124-issue ブランチの作成
  2. Windows で本番稼働させるためのディレクトリ作成
  3. bat ファイル作成
  4. product モードの時のみログファイルが作成されるようにする
  5. jar ファイル作成、配置
  6. nssm のダウンロード、配置、サービス登録
  7. 動作確認
  8. サービス削除
  9. commit、GitHub へ Push、feature/124-issue -> 1.0.x へ Pull Request、1.0.x でマージ、feature/124-issue ブランチを削除
  10. 次回は。。。

手順

feature/124-issue ブランチの作成

  1. feature/124-issue ブランチを作成します。

Windows で本番稼働させるためのディレクトリ作成

実行環境は以下のディレクトリ構成にします。ファイルは後から配置する ( ログファイルは後から作成される ) ので、まずは全てのディレクトリを作成します。

C:\webapps\ksbysample-webapp-lending
├ bat
│ └ webapp_startup.bat
├ lib
│ └ ksbysample-webapp-lending-1.0.0-RELEASE.jar
├ logs
│ ├ gc.log
│ └ ksbysample-webapp-lending.log
├ nssm
│ └ nssm.exe
└ work

bat ファイル作成

  1. プロジェクトのルート直下に webapps/ksbysample-webapp-lending/bat ディレクトリを新規作成します。

  2. webapps/ksbysample-webapp-lending/bat の下に webapp_startup.bat を新規作成します。作成後、リンク先の内容 に変更します。

  3. 作成した webapp_startup.bat を C:\webapps\ksbysample-webapp-lending\bat の下に配置します。

product モードの時のみログファイルが作成されるようにする

ディレクトリを作成後に jar ファイル作成のテストをしていた時に、IntelliJ IDEA で bootRun で起動した時にも C:\webapps\ksbysample-webapp-lending\logs の下に ksbysample-webapp-lending.log が作成されることに気づきました。develop モードと unittest モードの時にはログファイルが作成されないようにします。

  1. logback.xmlリンク先の内容 に変更します。

jar ファイル作成、配置

  1. バージョンを 1.0.0-RELEASE に変更します。build.gradle を リンク先の内容 に変更します。

  2. build タスクを実行して jar ファイルを作成します。

  3. C:\project-springboot\ksbysample-webapp-lending\build\libs の下に ksbysample-webapp-lending-1.0.0-RELEASE.jar が作成されますので、C:\webapps\ksbysample-webapp-lending\lib の下に配置します。

nssm のダウンロード、配置、サービス登録

  1. nssm の最新版をダウンロードします。https://nssm.cc/download のページ内の「Latest release」の「nssm 2.24」リンクをクリックして nssm-2.24.zip をダウンロードします。

  2. nssm-2.24.zip を解凍します。解凍して作成された nssm-2.24\win64 ( 32bit環境の場合には nssm-2.24\win32 ) ディレクトリの下にある nssm.exe を C:\webapps\ksbysample-webapp-lending\nssm の下に配置します。

  3. コマンドプロンプトを「管理者として実行...」モードで起動します。

  4. 以下のコマンドを実行します。

    > cd /d C:\webapps\ksbysample-webapp-lending\nssm
    > nssm.exe install ksbysample-webapp-lending

    ※nssm.exe のオプション一覧はコマンドプロンプトで "nssm.exe" を何もオプションを付けずに実行すれば表示されます。

  5. 「NSSM service installer」画面が表示されます。以下の画像の値を入力した後、「Install service」ボタンをクリックします。サービスの登録に成功すると「Service "ksbysample-webapp-lending" installed successfully!」のダイアログが表示されますので「OK」ボタンをクリックします。

    f:id:ksby:20160327200842p:plain

    • 「Path」に C:\webapps\ksbysample-webapp-lending\bat\webapp_startup.bat を入力します。
    • 「Startup directory」に C:\webapps\ksbysample-webapp-lending\bat を入力します。

動作確認

  1. 動作確認前に DB のデータを以下の状態にします。

    • user_info, user_role テーブルのデータは開発時のままにします。
    • lending_app, lending_book, library_forsearch テーブルのデータはクリアします。
  2. サービス画面を開きます。サービス一覧から「ksbysample-webapp-lending」を選択し、「サービスの開始」リンクをクリックしてサービスを開始します。

    f:id:ksby:20160327201909p:plain

    f:id:ksby:20160327202159p:plain

  3. C:\webapps\ksbysample-webapp-lending\logs の下の ksbysample-webapp-lending.log をエディタで開き、最後に "Started Application in ..." のログが出力されていることを確認します。

  4. メールを受信するので smtp4dev を起動します。

  5. 以下の手順で動作確認します ( 画面キャプチャは省略します )。

    • ブラウザを起動して http://localhost:8080/ にアクセスしてログイン画面を表示します。tanaka.taro@sample.com / taro でログインします。
    • 検索対象図書館登録画面が表示されます。"東京都" で検索した後、一覧表示されている図書館から「国立国会図書館東京本館」を選択します。
    • ログアウトします。
    • ログイン画面に戻るので suzuki.hanako@test.co.jp / hanako でログインします。
    • 貸出希望書籍 CSV ファイルアップロード画面が表示されます。以下の内容が記述された CSV ファイルをアップロードします。

      "ISBN","書名"
      "978-4-7741-6366-6","GitHub実践入門"
      "978-4-7741-5377-3","JUnit実践入門"
      "978-4-7973-8014-9","Java最強リファレンス"
      "978-4-7973-4778-4","アジャイルソフトウェア開発の奥義"
      "978-4-87311-704-1","Javaによる関数型プログラミング"

    • 「貸出状況を確認しました」のメールが送信されるので、メールに記述されている URL にアクセスします。
    • 貸出申請画面が表示されます。3冊程「申請する」を選択して申請します。
    • ログアウトします。
    • 「貸出申請がありました」のメールが送信されるので、メールに記述されている URL にアクセスします。ログイン画面が表示されるので、tanaka.taro@sample.com / taro でログインします。
    • 貸出承認画面が表示されます。「承認」あるいは「却下」を選択して確定させます。
    • ログアウトします。
    • 「貸出申請が承認・却下されました」のメールが送信されるので、メールに記述されている URL にアクセスします。ログイン画面が表示されるので、suzuki.hanako@test.co.jp / hanako でログインします。
    • 貸出申請結果確認画面が表示されるので内容を確認します。
  6. サービス画面で「ksbysample-webapp-lending」サービスを停止します。

サービス削除

  1. サービスを削除します。管理者モードで起動しているコマンドプロンプトから以下のコマンドを実行します。

    > nssm.exe remove ksbysample-webapp-lending

  2. 「Remove the service?」のダイアログが表示されますので、「はい」ボタンをクリックします。サービスが削除されると「Service "ksbysample-webapp-lending" removed successfully!」のダイアログが表示されますので「OK」ボタンをクリックします。

commit、GitHub へ Push、feature/124-issue -> 1.0.x へ Pull Request、1.0.x でマージ、feature/124-issue ブランチを削除

  1. commit、GitHub へ Push、feature/124-issue -> 1.0.x へ Pull Request、1.0.x でマージ、feature/124-issue ブランチを削除します。

次回は。。。

目次を作成してここまでの感想を書いて締める予定です。やっとここまできました。長かった。。。

ソースコード

webapp_startup.bat

@echo on

setlocal
set JAVA_HOME=C:\Java\jdk1.8.0_77
set PATH=%JAVA_HOME%\bin;%PATH%
set WEBAPP_HOME=C:\webapps\ksbysample-webapp-lending
set WEBAPP_JAR=ksbysample-webapp-lending-1.0.0-RELEASE.jar

cd /d %WEBAPP_HOME%
java -server ^
     -Xms1024m -Xmx1024m ^
     -XX:MaxMetaspaceSize=384m ^
     -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled ^
     -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 ^
     -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark ^
     -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps ^
     -Xloggc:%WEBAPP_HOME%/logs/gc.log ^
     -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M ^
     -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%WEBAPP_HOME%/logs/`date`.hprof ^
     -XX:ErrorFile=%WEBAPP_HOME%/logs/hs_err_pid_%p.log ^
     -Dsun.net.inetaddr.ttl=100 ^
     -Dcom.sun.management.jmxremote ^
     -Dcom.sun.management.jmxremote.port=7900 ^
     -Dcom.sun.management.jmxremote.ssl=false ^
     -Dcom.sun.management.jmxremote.authenticate=false ^
     -Dspring.profiles.active=product ^
     -jar lib\%WEBAPP_JAR%

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <if condition='"${spring.profiles.active}" == "product"'>
        <then>
            <property name="LOG_FILE" value="C:/webapps/ksbysample-webapp-lending/logs/ksbysample-webapp-lending.log"/>
            <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <encoder>
                    <pattern>${FILE_LOG_PATTERN}</pattern>
                </encoder>
                <file>${LOG_FILE}</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}</fileNamePattern>
                    <maxHistory>30</maxHistory>
                </rollingPolicy>
            </appender>
        </then>
    </if>

    <if condition='"${spring.profiles.active}" == "develop"'>
        <then>
            <include resource="logback-develop.xml"/>
        </then>
    </if>
    <if condition='"${spring.profiles.active}" == "unittest"'>
        <then>
            <include resource="logback-unittest.xml"/>
        </then>
    </if>
    <if condition='"${spring.profiles.active}" == "product"'>
        <then>
            <include resource="logback-product.xml"/>
        </then>
    </if>
</configuration>
  • <property name="LOG_FILE" ... /></appender> の設定を <if condition='"${spring.profiles.active}" == "product"'><then> ... </then></if> で囲みます。

build.gradle

jar {
    baseName = 'ksbysample-webapp-lending'
    version = '1.0.0-RELEASE'
}
  • version = '1.0.0-SNAPSHOT'version = '1.0.0-RELEASE' に変更します。

履歴

2016/03/27
初版発行。