1前書き

Spring Bootは私たちにサービスを素早くセットアップし実行する能力を与えてくれます。

開発経験をさらに強化するために、Springはspring-boot-devtoolsツールをSpring Boot-1.3の一部としてリリースしました。この記事では、新しい機能を使用して達成できる利点について説明します。

次のトピックについて説明します。

  • プロパティのデフォルト

  • 自動再起動

  • ライブリロード

  • 全体設定

  • リモートアプリケーション


1.1. プロジェクトにSpring-Boot-Devtoolsを追加する

プロジェクトに

spring-boot-devtools

を追加するのは、他のspring-bootモジュールを追加するのと同じくらい簡単です。既存のスプリングブートプロジェクトで、以下の依存関係を追加します。

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

プロジェクトのクリーンビルドを行います。これでspring-boot-devtoolsと統合されました。最新版はhttps://search.maven.org/classic/#artifactdetails%7Corg.springframework.boot%7Cspring-boot-devtools%7C1.5.2.RELEASE%7Cjar[here]から入手でき、すべてのバージョンが見つかります。

ここ


2プロパティのデフォルト値

Spring-bootは、パフォーマンスを向上させるためにデフォルトでキャッシュを有効にするなど、多くの自動設定を行います。そのような一例は、テンプレートエンジンによって使用されるテンプレートのキャッシングである。

thymeleaf

。しかし、開発中は、変更をできるだけ早く確認することがより重要です。


application.properties

ファイルでプロパティー

spring.thymeleaf.cache = false

を使用して、キャッシュのデフォルトの動作を

thymeleaf

に対して無効にすることができます。これを手動で行う必要はありません。この

spring-boot-devtools

を紹介することで、これは自動的に行われます。


3自動再起動

典型的なアプリケーション開発環境では、開発者はいくつかの変更を行い、プロジェクトをビルドしてアプリケーションをデプロイ/起動して新しい変更を有効にするか、あるいは

JRebel

などを利用しようとします


spring-boot-devtoolsを使用すると、このプロセスも自動化されます。クラスパス内でファイルが変更されるたびに、

spring-boot-devtools__を使用するアプリケーションはアプリケーションを再起動させます。この機能の利点は、加えられた変更を確認するために必要な時間が大幅に削減されることです。

19:45:44.804 ... - Included patterns for restart :[]19:45:44.809 ... - Excluded patterns for restart :[/spring-boot-starter/target/classes/,/spring-boot-autoconfigure/target/classes/,/spring-boot-starter-[\w-]+/,/spring-boot/target/classes/,/spring-boot-actuator/target/classes/,/spring-boot-devtools/target/classes/]19:45:44.810 ... - Matching URLs for reloading :[file:/.../target/test-classes/, file:/.../target/classes/]
 :: Spring Boot ::        (v1.5.2.RELEASE)

2017-03-12 19:45:45.174  ...: Starting Application on machine with PID 7724 (<some path>\target\classes started by user in <project name>)
2017-03-12 19:45:45.175  ...: No active profile set, falling back to default profiles: default
2017-03-12 19:45:45.510  ...: Refreshing org.springframework.boot[email protected]385c3ca3: startup date[Sun Mar 12 19:45:45 IST 2017]; root of context hierarchy

ログに見られるように、アプリケーションを生み出したスレッドは

main

ではなく

restartedMain

スレッドです。 Javaファイルの変更など、プロジェクトに変更を加えると、プロジェクトが自動的に再起動されます。

2017-03-12 19:53:46.204  ...: Closing org.springframework.boot[email protected]385c3ca3: startup date[Sun Mar 12 19:45:45 IST 2017]; root of context hierarchy
2017-03-12 19:53:46.208  ...: Unregistering JMX-exposed beans on shutdown


 :: Spring Boot ::        (v1.5.2.RELEASE)

2017-03-12 19:53:46.587  ...: Starting Application on machine with PID 7724 (<project path>\target\classes started by user in <project name>)
2017-03-12 19:53:46.588  ...: No active profile set, falling back to default profiles: default
2017-03-12 19:53:46.591  ...: Refreshing org.springframework.boot[email protected]acaf4a1: startup date[Sun Mar 12 19:53:46 IST 2017]; root of context hierarchy


4ライブリロード


spring-boot-devtools

モジュールには、リソースが変更されたときにブラウザの更新をトリガーするために使用される組み込みLiveReloadサーバーが含まれています。

ブラウザでこれを行うには、LiveReloadプラグインをインストールする必要があります。そのような実装の1つは、https://chrome.google.com/webstore/detail/remotelivereload/jlppknnillhjgiengoigajegdpieppei?hl = en-GB[Remote Live Reload]です。


5全体設定


spring-boot-devtools

は、どのアプリケーションとも連携していないグローバル設定を構成する方法を提供します。このファイルは

.spring-boot-devtools.properties

という名前で、$ HOMEにあります。


6. リモートアプリケーション


6.1. HTTPによるリモートデバッグ(Remote Debug Tunnel)

この機能を使用するには、

spring-boot-devtools

にHTTPによるリモートデバッグ機能が用意されているので、

spring-boot-devtools

をアプリケーションの一部としてパッケージ化する必要があります。これは、mavenのプラグインで

excludeDevtools

設定を無効にすることで達成できます。

これが簡単なサンプルです。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludeDevtools>false</excludeDevtools>
            </configuration>
        </plugin>
    </plugins>
</build>

HTTP経由のリモートデバッグを機能させるには、次の手順を実行する必要があります。

  1. サーバー上にデプロイされて開始されるアプリケーションは、

リモートデバッグを有効にして起動します。

-Xdebug -Xrunjdwp:server=y,transport=dt__socket,suspend=n

ご覧のとおり、リモートデバッグポートはここでは説明されていません。したがって、
Javaはランダムなポートを選びます
。同じプロジェクトの場合は、

起動設定

を開き、

以下のオプション:メインクラスを選択:


org.springframework.boot.devtools.RemoteSpringApplication

プログラムの引数で、アプリケーションのURLを追加します。



http://localhost:8080


。スプリングブートアプリケーションを介したデバッガのデフォルトポートは8000であり、

次のようにして上書きされます。

spring.devtools.remote.debug.local-port=8010

  1. ここで、リモートデバッグ設定を作成し、ポートを

    8010

    に設定

プロパティまたは

8000

で設定されている場合(デフォルトに固定されている場合)

ログは次のようになります。

  .   ________          __                                              ____ __ __
/\\/______'__ ____ __ __(__)__ ____  ____ __          ______               __      \ \ \ \
( ( )\______ | '__ | '__| | '__ \/__` |        | __ \______ __ ____  ______| |__ ______ \ \ \ \
 \\/ ______)| |__)| | | | | || (__|[]::::::[] /-__) '  \/__ \  __/-__) ) ) ) )
  '  |________| .____|__| |__|__| |__\____, |        |__|__\______|__|__|__\______/\____\______|//// =========|__|==============|______/===================================/__/__/__/ :: Spring Boot Remote ::  (v1.5.2.RELEASE)

2017-03-12 22:24:11.089  ...: Starting RemoteSpringApplication v1.5.2.RELEASE on machine with PID 10476 (..\org\springframework\boot\spring-boot-devtools\1.5.2.RELEASE\spring-boot-devtools-1.5.2.RELEASE.jar started by user in project)
2017-03-12 22:24:11.097  ...: No active profile set, falling back to default profiles: default
2017-03-12 22:24:11.357  ...: Refreshing org.spring[email protected]11e21d0e: startup date[Sun Mar 12 22:24:11 IST 2017]; root of context hierarchy
2017-03-12 22:24:11.869  ...: The connection to http://localhost:8080 is insecure. You should use a URL starting with 'https://'.
2017-03-12 22:24:11.949  ...: LiveReload server is running on port 35729
2017-03-12 22:24:11.983  ...: Started RemoteSpringApplication in 1.24 seconds (JVM running for 1.802)
2017-03-12 22:24:34.324  ...: Remote debug connection opened


6.2. リモートアップデート

リモートクライアントは、リモート再起動機能の場合と同様に、アプリケーションクラスパスの変更を監視します。クラスパスに変更があると、更新されたリソースがリモートアプリケーションにプッシュされ、再起動が引き起こされます。

変更されたファイルの監視はその時だけ可能であるので、変更はリモートクライアントが稼働しているときプッシュされます。

ログに表示される内容は次のとおりです。

2017-03-12 22:33:11.613  INFO 1484 ...: Remote debug connection opened
2017-03-12 22:33:21.869  INFO 1484 ...: Uploaded 1 class resource


7. 結論

この素早い記事で、私たちは

spring-boot-devtools

モジュールを活用して開発者の経験をより良くし、多くのアクティビティを自動化することによって開発時間を短縮する方法を説明しました。