Spring Bootでホットデプロイとか出来るの?思って調べてたら、Springloadedなるものを使えば出来る、とあったので試してみました。
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-reload-static-content
※78.4 Reload Java classes without restarting the container の所です
javaクラスやテンプレートエンジンに適用出来るみたいなのでまとめておきます。
pom.xmlの設定
springloadedへの依存関係を追加します、以下のようになります。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
</dependencies>
</plugin
Springloadedのバージョンは以下から任意のものを選んでください(最新版が良いかと思います)。
http://mvnrepository.com/artifact/org.springframework/springloaded
Spring BootのVM引数の設定
公式によると、上記pom.xmlの設定のみでOKみたいな感じですが、実際はこれをやらないとダメでした。
STSでプロジェクトを右クリック → 【Run As】 → 【Run Configurations…】 → 【Java Application】 → 【プロジェクト名】 → Argumentsタブ → VM arguments
に以下を入力
-javaagent:M2REPO/repository/org/springframework/springloaded/1.2.1.RELEASE/springloaded-1.2.1.RELEASE.jar -noverify
※M2REPOのところは各自のMavenローカルリポジトリのパスを指定します。
※1.2.1のところは利用するバージョンになります。
こうすることでSpringloadedが効きます。
以降はテンプレートエンジンのオートリロードについてです。
Thymeleafテンプレートのオートリロード
application.properties(or YML)に以下を追加します。
spring.thymeleaf.cache=false
FreeMarkerテンプレートのオートリロード
application.properties(or YML)に以下を追加します。
spring.freemarker.cache=false
Groovyテンプレートのオートリロード
application.properties(or YML)に以下を追加します。
spring.groovy.template.cache=false
Velocityテンプレートのオートリロード
application.properties(or YML)に以下を追加します。
spring.velocity.cache=false
2016/4/27 追記
Spring Boot1.3以上を使っている方は、Spring Loadedはもう開発が進んでないので使わない方がいいです。代わりにSpring Boot1.3から使えるSpring Dev Toolsを使った方がいいです。
やっぱりSpring Boot1.3以上ではSpring Loadedうまく動かないのでSpring Devtoolsに変えたら期待通りになった
— Kenichi Nagaoka (@ARS_2000) 2016年5月3日
@su_kun_1899 Spring Loadedはもう開発進んでないので、使わない方がいいです。代わりに1.3から使えるDev Toolsを
— Toshiaki Maki (@making) 2016年4月4日
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>