親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

Spring Boot Devtoolsを使って自動再起動


Javaなどソースの変更をいちいちコンパイルをして確認する場合、
毎回コンパイルを手動でするのは面倒ですよね。
(慣れている人は何も感じないかもしれませんがw)

Spring Bootでは自動でコンパイルをしてくれるツールがあるので、
少しは開発効率を上げることができます。
それを行うためには、Spring Boot Devtoolsというものを入れる必要があり、
pom.xmlに依存関係を追加すれば完了です。

pom.xml

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

Mavenの再読み込みすることを忘れないでください!

Java側で自動再起動は不要だが、
Thymeleafは変更をした場合に再起動なしですぐに確認したいという場合、
Thymeleafのキャッシュを無効にすることができます。
その場合は以下の設定をapplication.ymlに追加してください。

application.yml

spring:
	thymeleaf:
		cache: false


ただしこの設定はspring-boot-devtoolsを使うのであれば不要です。
自動でcacheを無効にしてくれるので。

基本的にはこれでコンパイルの自動化ができるはずなんですが、
Intellijを使用している方は追加で設定が必要です。

以下のページが参考になるのですが、追加で以下の手順を踏んでください。

dzone.com

「Preferences->Build, Execution, Deployment->Compiler」と進み、
「Build project automatically」にチェックを入れてください。

f:id:tomotomo1129:20180619132934j:plain

次にWindowsの方は「ctrl」+「shift」+「A」、Macの方は「command」+「shift」+「A」を同時に押すと
以下のような入力欄が出て来るので、

f:id:tomotomo1129:20180619132940j:plain

「Registry」と入力してください。

すると以下の画面が出てきますので、

f:id:tomotomo1129:20180619132945j:plain

「compiler.automake.allow.when.app.running」にチェックを入れて
Intellijを再起動すれば設定完了です。
何か適当にJava側のコードを書き換えて再コンパイルされることを確認してください。
上手くいくと以下のように起動ログが連なっていきます。

f:id:tomotomo1129:20180619132937j:plain

Thymeleafはコンパイルをしなくても変更が反映されるので、
Thymeleafを変更しても自動でコンパイルはされません。