Dropwizard 1.0.0 からServer::Starter
と
Hot Deploy が
当時は
時を
Server::Starter から
に
試してみた
前提
OS Mac OS
10.12.6
です。sw_vers -productVersion ------------------------ 10.12.6 ------------------------
java version
1.8.0_45
です。java -version ------------------------ java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) ------------------------
dropwizard version
1.1.2
です。<dependency> <groupId>io.dropwizard</groupId> <artifactId>dropwizard-core</artifactId> <version>1.1.2</version> </dependency>
参考
Dropwizardが
Server::Starterを 使った hot Deployに 対応しました - @matsumana の 技術メモ 普通の
デーモンを 1) Server::Starterで ホットデプロイ+ 2) slow-restart対応に する - Qiita
手順
Dropwizard の
また、
1. Server::Starterの インストール
- cpanm の
インストール
そもそもcpanm が なんなのかよく わからなかったのですが、
perlモジュールのinstallに cpanmを 使う|perl|@OMAKASE
を見る 限り、 java で いう ところの maven
とかgradle
python でいう ところの pip
のようなものだと 理解しました。
mac だと、brew で install できるようなので、 brew コマンドで install を 実施します。 brew install cpanminus ---------------------------------------------------- /usr/local/Cellar/cpanminus/1.7043: 6 files, 381.5KB, built in 25 seconds ----------------------------------------------------
インストール (成功パターン)
sudo 付きで
Server::Starter自体の インストール sudo cpanm Server::Starter ----------------------------- 9 distributions installed -----------------------------
start_server 実行
うまくstart_server ----------------------------- server program not specified -----------------------------
動いているようです。
補足 インストール (失敗パターン)
以下は、
参考情報と
Server::Starter自体の
インストール cpanm Server::Starter ---------------------------------------------------- 9 distributions installed ----------------------------------------------------
PATHの
追加 (失敗)
何故かstart_server
へのPATHが 通ってなかったので、
.bash_profile にPATHを 追加しました。 # Server::Starter export PERL5BINPATH=/Users/user_name/perl5/bin/start_server export PATH=$PATH:$PERL5BINPATH
start_server 起動
一旦以下、素の start_server
を叩いてみた ところ、 以下エラーがstart_server
発生しました。 再度、Can't locate Server/Starter.pm in @INC (you may need to install the Server::Starter module)
をcpanm Server::Starter
実行すると、 と! ! Can't write to /Library/Perl/5.18 and /usr/local/bin: Installing modules to /Users/user_name/perl5 ! To turn off this warning, you have to do one of the following: ! - run me as a root or with --sudo option (to install to /Library/Perl/5.18 and /usr/local/bin) ! - Configure local::lib in your existing shell to set PERL_MM_OPT etc. ! - Install local::lib by running the following commands ! ! cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) !
いう Warning が 出力されておりましたので、 sudo
をつけて、 再実行しました。 PATHの
削除 追加した PATHを 削除しました。 # Server::Starter #export PERL5BINPATH=/Users/user_name/perl5/bin/start_server #export PATH=$PATH:$PERL5BINPATH
2. Server::Starter 経由で、 Dropwizard の 起動
Dropwizard の
指定しているdevelop.yml
には、inheritChannel
の
develop.yml
server: type: default gzip: enabled: true minimumEntitySize: 256B bufferSize: 8KB applicationConnectors: - type: http port: 11080 inheritChannel: true adminConnectors: - type: http port: 11443
起動
port が同じだと、 jetty が 起動しなかったため、
dropwizard の起動が 11080
なのに対して、
start_server の起動は、 10180
にしました。
inheritChannel: true
にしても、 inheritChannel: false
にしても、
挙動変わらずで、Mac だと、 inheritChannel
が効いていないのかもしれません。 1
[1].inheritChannel
の設定が start server の 設定に 影響するのかっつーと よく わかってないですが、 たぶんそんな 感じが します。 start_server --daemonize \ --log-file=start_server.log \ --pid-file=start_server.pid \ --status-file=start_server.status \ --port=10180=0 \ java -- -jar ./target/{dropwizard_project}.jar server develop.yml
再起動
start_server --pid-file=start_server.pid --status-file=start_server.status --restart
停止
start_server --pid-file=start_server.pid --stop
補足 サーバー起動した
後、 jar を 固めた 時の 動作 でmvn package
起動した jar ファイルを 再度固め直すと、 「MAINプログラムが ない」
で、java の プロセスが 落ちた 後、 start_server に よって、 再起動が 走ると いう 動作に なり、
一瞬プロセスは切れますが、 アプリケーションは 新しいjarへと 切り 替わります。
Maven exec-maven-plugin と、 IntelliJ の keyboard shortcut でもう 少し 起動を 早くする
毎度毎度、mvn package
やるのは
exec-maven-plugin
と、
もう
exec-maven-plugin の 設定
exec-maven-plugin
の
ymlは${project.basedir}/develop.yml
と
子pomから
pom.xml に
追記 これで、<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass> xyz.monotalk.festivals4partypeople.web.dropwizard.start.Festivals4PartyPeopleApplication </mainClass> <arguments> <argument>server</argument> <argument>${project.basedir}/develop.yml</argument> </arguments> </configuration> </plugin>
mvn exec:java
でDropwizard アプリケーションが 立ち上がります。 依存する
オレオレjar を mvn install する
以前は、親pom 経由で 全プロジェクトビルドを かけていたので、 うまく いってたのですが、
Dropwizardアプリケーションが依存する オレオレjar が mvn exec:java
では、ビルドされず、
エラーとなっていたので、 事前に 以下コマンド実行で、 依存する オレオレjarを installしました。 mvn install -pl myproject1 mvn install -pl myproject2
Server::Starter経由で、 Dropwizardを 起動する スクリプトの 作成
起動、
起動コマンドでexec:java
で、
起動、
ログの
wep_app_start.sh
#!/usr/bin/env bash # start_server start_server --daemonize \ --log-file=start_server.log \ --pid-file=start_server.pid \ --status-file=start_server.status \ --port=11080=0 mvn exec:java # tail log tail -f -n 1000 start_server.log
web_app_restart.sh
#!/usr/bin/env bash # restart server start_server --pid-file=start_server.pid --status-file=start_server.status --restart # tail log tail -f -n 1000 start_server.log
web_app_stop.sh
#!/usr/bin/env bash start_server --pid-file=start_server.pid --stop
スクリプトを、 External Tools と して IntelliJ の keyboard shortcut に 割り当てする
上記の
External Toolsと
して 登録
Preferences を開き、 Tools > External Tools を 選択します。
+
ボタンを押して、 対象の スクリプトを 登録します。 keyboard shortcut に
割り当て
Preferences を開き、 Keymap > External Tools から 登録した スクリプトを
ショートカットに割り当てます。
キー組み合わせでの 登録が できますので、 私は [Command + @] + [Command + 1] とかで 割り当てました。
これで、wep_app_start.sh
で
プログラム修正して
wep_app_restart.sh
で
web_app_stop.sh
で
2
[2]. 実は、
以上です。
コメント